aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Poulain <loic.poulain@linaro.org>2020-02-21 15:36:18 +0100
committerLoic Poulain <loic.poulain@linaro.org>2020-02-21 16:32:38 +0100
commitfead20b3448d04f7a59ff8c225d23ade5fc43996 (patch)
tree722cf452173c57676682a03d61150364c7ce1391
parent4e5922c13eaef1203751a5d9442ff946c9a4d523 (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.c10
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);
}