Move kernel config and patches to kernel 6.6. Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
165 lines
5.4 KiB
Diff
165 lines
5.4 KiB
Diff
From 4aedcd4aa61d536ca17e67ecd5bc5d42529164f4 Mon Sep 17 00:00:00 2001
|
|
From: Neil Armstrong <neil.armstrong@linaro.org>
|
|
Date: Thu, 16 Nov 2023 15:05:13 +0100
|
|
Subject: [PATCH] mfd: rk8xx: fixup devices registration with
|
|
PLATFORM_DEVID_AUTO
|
|
|
|
Since commit 210f418f8ace ("mfd: rk8xx: Add rk806 support"), devices are
|
|
registered with "0" as id, causing devices to not have an automatic device id
|
|
and prevents having multiple RK8xx PMICs on the same system.
|
|
|
|
Properly pass PLATFORM_DEVID_AUTO to devm_mfd_add_devices() and since
|
|
it will ignore the cells .id with this special value, also cleanup
|
|
by removing all now ignored cells .id values.
|
|
|
|
Now we have the same behaviour as before rk806 introduction and rk806
|
|
retains the intended behavior.
|
|
|
|
This fixes a regression while booting the Odroid Go Ultra on v6.6.1:
|
|
sysfs: cannot create duplicate filename '/bus/platform/devices/rk808-clkout'
|
|
CPU: 3 PID: 97 Comm: kworker/u12:2 Not tainted 6.6.1 #1
|
|
Hardware name: Hardkernel ODROID-GO-Ultra (DT)
|
|
Workqueue: events_unbound deferred_probe_work_func
|
|
Call trace:
|
|
dump_backtrace+0x9c/0x11c
|
|
show_stack+0x18/0x24
|
|
dump_stack_lvl+0x78/0xc4
|
|
dump_stack+0x18/0x24
|
|
sysfs_warn_dup+0x64/0x80
|
|
sysfs_do_create_link_sd+0xf0/0xf8
|
|
sysfs_create_link+0x20/0x40
|
|
bus_add_device+0x114/0x160
|
|
device_add+0x3f0/0x7cc
|
|
platform_device_add+0x180/0x270
|
|
mfd_add_device+0x390/0x4a8
|
|
devm_mfd_add_devices+0xb0/0x150
|
|
rk8xx_probe+0x26c/0x410
|
|
rk8xx_i2c_probe+0x64/0x98
|
|
i2c_device_probe+0x104/0x2e8
|
|
really_probe+0x184/0x3c8
|
|
__driver_probe_device+0x7c/0x16c
|
|
driver_probe_device+0x3c/0x10c
|
|
__device_attach_driver+0xbc/0x158
|
|
bus_for_each_drv+0x80/0xdc
|
|
__device_attach+0x9c/0x1ac
|
|
device_initial_probe+0x14/0x20
|
|
bus_probe_device+0xac/0xb0
|
|
deferred_probe_work_func+0xa0/0xf4
|
|
process_one_work+0x1bc/0x378
|
|
worker_thread+0x1dc/0x3d4
|
|
kthread+0x104/0x118
|
|
ret_from_fork+0x10/0x20
|
|
rk8xx-i2c 0-001c: error -EEXIST: failed to add MFD devices
|
|
rk8xx-i2c: probe of 0-001c failed with error -17
|
|
|
|
Fixes: 210f418f8ace ("mfd: rk8xx: Add rk806 support")
|
|
Reported-by: Adam Green <greena88@gmail.com>
|
|
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
|
|
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
|
|
Link: https://lore.kernel.org/r/20231116-topic-amlogic-upstream-fix-rk8xx-devid-auto-v2-1-3f1bad68ab9d@linaro.org
|
|
Signed-off-by: Lee Jones <lee@kernel.org>
|
|
---
|
|
drivers/mfd/rk8xx-core.c | 34 +++++++++++++---------------------
|
|
1 file changed, 13 insertions(+), 21 deletions(-)
|
|
|
|
--- a/drivers/mfd/rk8xx-core.c
|
|
+++ b/drivers/mfd/rk8xx-core.c
|
|
@@ -53,76 +53,68 @@ static const struct resource rk817_charg
|
|
};
|
|
|
|
static const struct mfd_cell rk805s[] = {
|
|
- { .name = "rk808-clkout", .id = PLATFORM_DEVID_NONE, },
|
|
- { .name = "rk808-regulator", .id = PLATFORM_DEVID_NONE, },
|
|
- { .name = "rk805-pinctrl", .id = PLATFORM_DEVID_NONE, },
|
|
+ { .name = "rk808-clkout", },
|
|
+ { .name = "rk808-regulator", },
|
|
+ { .name = "rk805-pinctrl", },
|
|
{
|
|
.name = "rk808-rtc",
|
|
.num_resources = ARRAY_SIZE(rtc_resources),
|
|
.resources = &rtc_resources[0],
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
{ .name = "rk805-pwrkey",
|
|
.num_resources = ARRAY_SIZE(rk805_key_resources),
|
|
.resources = &rk805_key_resources[0],
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
};
|
|
|
|
static const struct mfd_cell rk806s[] = {
|
|
- { .name = "rk805-pinctrl", .id = PLATFORM_DEVID_AUTO, },
|
|
- { .name = "rk808-regulator", .id = PLATFORM_DEVID_AUTO, },
|
|
+ { .name = "rk805-pinctrl", },
|
|
+ { .name = "rk808-regulator", },
|
|
{
|
|
.name = "rk805-pwrkey",
|
|
.resources = rk806_pwrkey_resources,
|
|
.num_resources = ARRAY_SIZE(rk806_pwrkey_resources),
|
|
- .id = PLATFORM_DEVID_AUTO,
|
|
},
|
|
};
|
|
|
|
static const struct mfd_cell rk808s[] = {
|
|
- { .name = "rk808-clkout", .id = PLATFORM_DEVID_NONE, },
|
|
- { .name = "rk808-regulator", .id = PLATFORM_DEVID_NONE, },
|
|
+ { .name = "rk808-clkout", },
|
|
+ { .name = "rk808-regulator", },
|
|
{
|
|
.name = "rk808-rtc",
|
|
.num_resources = ARRAY_SIZE(rtc_resources),
|
|
.resources = rtc_resources,
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
};
|
|
|
|
static const struct mfd_cell rk817s[] = {
|
|
- { .name = "rk808-clkout", .id = PLATFORM_DEVID_NONE, },
|
|
- { .name = "rk808-regulator", .id = PLATFORM_DEVID_NONE, },
|
|
+ { .name = "rk808-clkout", },
|
|
+ { .name = "rk808-regulator", },
|
|
{
|
|
.name = "rk805-pwrkey",
|
|
.num_resources = ARRAY_SIZE(rk817_pwrkey_resources),
|
|
.resources = &rk817_pwrkey_resources[0],
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
{
|
|
.name = "rk808-rtc",
|
|
.num_resources = ARRAY_SIZE(rk817_rtc_resources),
|
|
.resources = &rk817_rtc_resources[0],
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
- { .name = "rk817-codec", .id = PLATFORM_DEVID_NONE, },
|
|
+ { .name = "rk817-codec", },
|
|
{
|
|
.name = "rk817-charger",
|
|
.num_resources = ARRAY_SIZE(rk817_charger_resources),
|
|
.resources = &rk817_charger_resources[0],
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
};
|
|
|
|
static const struct mfd_cell rk818s[] = {
|
|
- { .name = "rk808-clkout", .id = PLATFORM_DEVID_NONE, },
|
|
- { .name = "rk808-regulator", .id = PLATFORM_DEVID_NONE, },
|
|
+ { .name = "rk808-clkout", },
|
|
+ { .name = "rk808-regulator", },
|
|
{
|
|
.name = "rk808-rtc",
|
|
.num_resources = ARRAY_SIZE(rtc_resources),
|
|
.resources = rtc_resources,
|
|
- .id = PLATFORM_DEVID_NONE,
|
|
},
|
|
};
|
|
|
|
@@ -684,7 +676,7 @@ int rk8xx_probe(struct device *dev, int
|
|
pre_init_reg[i].addr);
|
|
}
|
|
|
|
- ret = devm_mfd_add_devices(dev, 0, cells, nr_cells, NULL, 0,
|
|
+ ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO, cells, nr_cells, NULL, 0,
|
|
regmap_irq_get_domain(rk808->irq_data));
|
|
if (ret)
|
|
return dev_err_probe(dev, ret, "failed to add MFD devices\n");
|