From 42b5ed0274fff794bca366ee155da4fbbfa3959e Mon Sep 17 00:00:00 2001 From: "Milton D. Miller II" Date: Fri, 5 Feb 2016 06:56:40 -0600 Subject: [PATCH] i2c: aspeed: Request irq with bus name Request each irq with the unique bus name not a constant string. The aspeed i2c controller has an irq per bus and this has been exposed as an irq domain. However, each irq is requested the same device name, leaving one to guess which irq in /proc/interrupts corresponds to which device. While the controller irq number is unique and happens to match, it is not obvious that there is no offset. The driver registers the bus with the numbered bus api, so the global bus number is known an we can predict it before registering. The information that this is from an ast-i2c bus is in the irq controller name or could be found from the matching i2c bus device in sysfs. Excerpt of /proc/interrupts before this patch: 220: 1094 ast-i2c 0 Edge ast-i2c-bus 221: 0 ast-i2c 1 Edge ast-i2c-bus 222: 9438 ast-i2c 2 Edge ast-i2c-bus 223: 26480 ast-i2c 3 Edge ast-i2c-bus New excerpt from /proc/interrupts: 220: 1094 ast-i2c 0 Edge i2c-0 221: 0 ast-i2c 1 Edge i2c-1 222: 9438 ast-i2c 2 Edge i2c-2 223: 26480 ast-i2c 3 Edge i2c-3 224: 0 ast-i2c 4 Edge i2c-4 New example proc/irq/ directory: /proc/irq/222: i2c-2 spurious Signed-off-by: Milton Miller --- drivers/i2c/busses/i2c-aspeed.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c index e4bf88a32ec508..6aad22a1d09688 100644 --- a/drivers/i2c/busses/i2c-aspeed.c +++ b/drivers/i2c/busses/i2c-aspeed.c @@ -684,6 +684,7 @@ static int ast_i2c_probe_bus(struct platform_device *pdev) struct ast_i2c_bus *bus; struct resource res; int ret, bus_num; + char *irq_name; bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL); if (!bus) @@ -713,8 +714,9 @@ static int ast_i2c_probe_bus(struct platform_device *pdev) return -ENXIO; } + irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "i2c-%d", bus_num); ret = devm_request_irq(&pdev->dev, bus->irq, ast_i2c_bus_irq, - 0, "ast-i2c-bus", bus); + 0, irq_name, bus); if (ret) { dev_err(&pdev->dev, "devm_request_irq failed\n"); return -ENXIO;