diff options
author | Loic Poulain <loic.poulain@linaro.org> | 2020-02-21 15:36:18 +0100 |
---|---|---|
committer | Loic Poulain <loic.poulain@linaro.org> | 2020-02-21 16:32:38 +0100 |
commit | fead20b3448d04f7a59ff8c225d23ade5fc43996 (patch) | |
tree | 722cf452173c57676682a03d61150364c7ce1391 | |
parent | 4e5922c13eaef1203751a5d9442ff946c9a4d523 (diff) |
hw: arm: virt: Connect TMP105 alert pin to GPIO #4
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
-rw-r--r-- | hw/arm/virt.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/hw/arm/virt.c b/hw/arm/virt.c index e59843186c..6ba8bf8453 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -796,6 +796,9 @@ static void create_rtc(const VirtMachineState *vms, qemu_irq *pic) } static DeviceState *gpio_key_dev; +static DeviceState *pl061_dev; +uint32_t phandle_gpio; + static void virt_powerdown_req(Notifier *n, void *opaque) { VirtMachineState *s = container_of(n, VirtMachineState, powerdown_notifier); @@ -811,7 +814,6 @@ static void virt_powerdown_req(Notifier *n, void *opaque) static void create_gpio(const VirtMachineState *vms, qemu_irq *pic) { char *nodename; - DeviceState *pl061_dev; hwaddr base = vms->memmap[VIRT_GPIO].base; hwaddr size = vms->memmap[VIRT_GPIO].size; int irq = vms->irqmap[VIRT_GPIO]; @@ -820,6 +822,7 @@ static void create_gpio(const VirtMachineState *vms, qemu_irq *pic) pl061_dev = sysbus_create_simple("pl061", base, pic[irq]); uint32_t phandle = qemu_fdt_alloc_phandle(vms->fdt); + phandle_gpio = phandle; nodename = g_strdup_printf("/pl061@%" PRIx64, base); qemu_fdt_add_subnode(vms->fdt, nodename); qemu_fdt_setprop_sized_cells(vms->fdt, nodename, "reg", @@ -858,6 +861,7 @@ static void create_i2c(const VirtMachineState *vms, qemu_irq *pic) hwaddr i2c_addr = 0x48; const char compat1[] = "arm,versatile-i2c"; const char compat2[] = "ti,tmp105"; + qemu_irq tmp105_alert; DeviceState *dev; char *nodename; I2CBus *i2c; @@ -865,6 +869,8 @@ static void create_i2c(const VirtMachineState *vms, qemu_irq *pic) dev = sysbus_create_simple("versatile_i2c", base, NULL); i2c = (I2CBus *)qdev_get_child_bus(dev, "i2c"); dev = i2c_create_slave(i2c, "tmp105", i2c_addr); + tmp105_alert = qdev_get_gpio_in(pl061_dev, 4); /* gpio 4 of pl061 */ + qdev_connect_gpio_out(dev, 0, tmp105_alert); object_property_set_int(OBJECT(dev), 31000, "temperature", &error_abort); uint32_t phandle = qemu_fdt_alloc_phandle(vms->fdt); @@ -881,6 +887,8 @@ static void create_i2c(const VirtMachineState *vms, qemu_irq *pic) qemu_fdt_add_subnode(vms->fdt, nodename); qemu_fdt_setprop(vms->fdt, nodename, "compatible", compat2, sizeof(compat2)); qemu_fdt_setprop_cell(vms->fdt, nodename, "reg", i2c_addr); + qemu_fdt_setprop_cells(vms->fdt, nodename, "alert-gpios", phandle_gpio, 4, 0); + g_free(nodename); } |