hw/misc/pca9552: Model qdev output GPIOs
The PCA9552 has 16 GPIOs which can be used as input, output or PWM mode. QEMU models the output GPIO with the qemu_irq type. Let the device expose the 16 GPIOs to allow us to later connect LEDs to these outputs. Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Cédric Le Goater <clg@kaod.org> Message-id: 20200623072723.6324-10-f4bug@amsat.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
d82ab2931d
commit
586f495b1e
@ -17,6 +17,7 @@
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/misc/pca9552.h"
|
||||
#include "hw/misc/pca9552_regs.h"
|
||||
#include "hw/irq.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/visitor.h"
|
||||
@ -111,9 +112,11 @@ static void pca955x_update_pin_input(PCA955xState *s)
|
||||
|
||||
switch (config) {
|
||||
case PCA9552_LED_ON:
|
||||
qemu_set_irq(s->gpio[i], 1);
|
||||
s->regs[input_reg] |= 1 << input_shift;
|
||||
break;
|
||||
case PCA9552_LED_OFF:
|
||||
qemu_set_irq(s->gpio[i], 0);
|
||||
s->regs[input_reg] &= ~(1 << input_shift);
|
||||
break;
|
||||
case PCA9552_LED_PWM0:
|
||||
@ -374,11 +377,14 @@ static void pca955x_initfn(Object *obj)
|
||||
|
||||
static void pca955x_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
PCA955xClass *k = PCA955X_GET_CLASS(dev);
|
||||
PCA955xState *s = PCA955X(dev);
|
||||
|
||||
if (!s->description) {
|
||||
s->description = g_strdup("pca-unspecified");
|
||||
}
|
||||
|
||||
qdev_init_gpio_out(dev, s->gpio, k->pin_count);
|
||||
}
|
||||
|
||||
static Property pca955x_properties[] = {
|
||||
|
@ -27,6 +27,7 @@ typedef struct PCA955xState {
|
||||
uint8_t pointer;
|
||||
|
||||
uint8_t regs[PCA955X_NR_REGS];
|
||||
qemu_irq gpio[PCA955X_PIN_COUNT_MAX];
|
||||
char *description; /* For debugging purpose only */
|
||||
} PCA955xState;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user