[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 26/39] hw/misc: Add GPIOs for duty in NPCM7xx PWM
From: |
Peter Maydell |
Subject: |
[PULL 26/39] hw/misc: Add GPIOs for duty in NPCM7xx PWM |
Date: |
Fri, 12 Mar 2021 13:51:27 +0000 |
From: Hao Wu <wuhaotsh@google.com>
This patch adds GPIOs in NPCM7xx PWM module for its duty values.
The purpose of this is to connect it to the MFT module to provide
an input for measuring a PWM fan's RPM. Each PWM module has
NPCM7XX_PWM_PER_MODULE of GPIOs, each one corresponds to
one PWM instance and can connect to multiple fan instances in MFT.
Reviewed-by: Doug Evans <dje@google.com>
Reviewed-by: Tyrone Ting <kfting@nuvoton.com>
Signed-off-by: Hao Wu <wuhaotsh@google.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20210311180855.149764-2-wuhaotsh@google.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
include/hw/misc/npcm7xx_pwm.h | 4 +++-
hw/misc/npcm7xx_pwm.c | 4 ++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/hw/misc/npcm7xx_pwm.h b/include/hw/misc/npcm7xx_pwm.h
index 5a689d3f669..7ad632a93a1 100644
--- a/include/hw/misc/npcm7xx_pwm.h
+++ b/include/hw/misc/npcm7xx_pwm.h
@@ -77,6 +77,7 @@ typedef struct NPCM7xxPWM {
* @iomem: Memory region through which registers are accessed.
* @clock: The PWM clock.
* @pwm: The PWM channels owned by this module.
+ * @duty_gpio_out: The duty cycle of each PWM channels as a output GPIO.
* @ppr: The prescaler register.
* @csr: The clock selector register.
* @pcr: The control register.
@@ -89,7 +90,8 @@ struct NPCM7xxPWMState {
MemoryRegion iomem;
Clock *clock;
- NPCM7xxPWM pwm[NPCM7XX_PWM_PER_MODULE];
+ NPCM7xxPWM pwm[NPCM7XX_PWM_PER_MODULE];
+ qemu_irq duty_gpio_out[NPCM7XX_PWM_PER_MODULE];
uint32_t ppr;
uint32_t csr;
diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c
index ce192bb2741..2be5bd25c6c 100644
--- a/hw/misc/npcm7xx_pwm.c
+++ b/hw/misc/npcm7xx_pwm.c
@@ -139,6 +139,7 @@ static void npcm7xx_pwm_update_duty(NPCM7xxPWM *p)
trace_npcm7xx_pwm_update_duty(DEVICE(p->module)->canonical_path,
p->index, p->duty, duty);
p->duty = duty;
+ qemu_set_irq(p->module->duty_gpio_out[p->index], p->duty);
}
}
@@ -483,6 +484,7 @@ static void npcm7xx_pwm_init(Object *obj)
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
int i;
+ QEMU_BUILD_BUG_ON(ARRAY_SIZE(s->pwm) != NPCM7XX_PWM_PER_MODULE);
for (i = 0; i < NPCM7XX_PWM_PER_MODULE; i++) {
NPCM7xxPWM *p = &s->pwm[i];
p->module = s;
@@ -501,6 +503,8 @@ static void npcm7xx_pwm_init(Object *obj)
object_property_add_uint32_ptr(obj, "duty[*]",
&s->pwm[i].duty, OBJ_PROP_FLAG_READ);
}
+ qdev_init_gpio_out_named(DEVICE(s), s->duty_gpio_out,
+ "duty-gpio-out", NPCM7XX_PWM_PER_MODULE);
}
static const VMStateDescription vmstate_npcm7xx_pwm = {
--
2.20.1
- [PULL 08/39] hw/arm/smmuv3: Fix SMMU_CMD_CFGI_STE_RANGE handling, (continued)
- [PULL 08/39] hw/arm/smmuv3: Fix SMMU_CMD_CFGI_STE_RANGE handling, Peter Maydell, 2021/03/12
- [PULL 09/39] hw/arm/smmuv3: Uniformize sid traces, Peter Maydell, 2021/03/12
- [PULL 11/39] target/arm: Fix sve_zip_p vs odd vector lengths, Peter Maydell, 2021/03/12
- [PULL 21/39] tests/acceptance: update sunxi kernel from armbian to 5.10.16, Peter Maydell, 2021/03/12
- [PULL 14/39] target/arm: Update BRKA, BRKB, BRKN for PREDDESC, Peter Maydell, 2021/03/12
- [PULL 18/39] hw/net/allwinner-sun8i-emac: traverse transmit queue using TX_CUR_DESC register value, Peter Maydell, 2021/03/12
- [PULL 24/39] accel: kvm: Fix kvm_type invocation, Peter Maydell, 2021/03/12
- [PULL 27/39] hw/misc: Add NPCM7XX MFT Module, Peter Maydell, 2021/03/12
- [PULL 29/39] hw/arm: Connect PWM fans in NPCM7XX boards, Peter Maydell, 2021/03/12
- [PULL 35/39] hw/display/pxa2xx_lcd: Remove dest_width state field, Peter Maydell, 2021/03/12
- [PULL 26/39] hw/misc: Add GPIOs for duty in NPCM7xx PWM,
Peter Maydell <=
- [PULL 34/39] hw/display/pxa2xx_lcd: Remove dead code for non-32-bpp surfaces, Peter Maydell, 2021/03/12
- [PULL 16/39] target/arm: Update WHILE for PREDDESC, Peter Maydell, 2021/03/12
- [PULL 23/39] hw/timer/sse-timer: Propagate eventual error in sse_timer_realize(), Peter Maydell, 2021/03/12
- [PULL 12/39] target/arm: Fix sve_punpk_p vs odd vector lengths, Peter Maydell, 2021/03/12
- [PULL 19/39] tests/acceptance/boot_linux_console: remove Armbian 19.11.3 bionic test for orangepi-pc machine, Peter Maydell, 2021/03/12
- [PULL 20/39] tests/acceptance/boot_linux_console: change URL for test_arm_orangepi_bionic_20_08, Peter Maydell, 2021/03/12
- [PULL 10/39] target/arm: Fix sve_uzp_p vs odd vector lengths, Peter Maydell, 2021/03/12
- [PULL 25/39] hw/arm/virt: KVM: The IPA lower bound is 32, Peter Maydell, 2021/03/12
- [PULL 22/39] tests/acceptance: drop ARMBIAN_ARTIFACTS_CACHED condition for orangepi-pc, cubieboard tests, Peter Maydell, 2021/03/12
- [PULL 30/39] tests/qtest: Test PWM fan RPM using MFT in PWM test, Peter Maydell, 2021/03/12