Patch "mfd: rk8xx: fixup devices registration with PLATFORM_DEVID_AUTO" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mfd: rk8xx: fixup devices registration with PLATFORM_DEVID_AUTO

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mfd-rk8xx-fixup-devices-registration-with-platform_d.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e1d79a95fc0a3a5d1214ec41bf6ac66f3a74ac64
Author: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
Date:   Thu Nov 16 15:05:13 2023 +0100

    mfd: rk8xx: fixup devices registration with PLATFORM_DEVID_AUTO
    
    [ Upstream commit 4aedcd4aa61d536ca17e67ecd5bc5d42529164f4 ]
    
    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@xxxxxxxxx>
    Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
    Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20231116-topic-amlogic-upstream-fix-rk8xx-devid-auto-v2-1-3f1bad68ab9d@xxxxxxxxxx
    Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/mfd/rk8xx-core.c b/drivers/mfd/rk8xx-core.c
index c47164a3ec1d..b1ffc3b9e2be 100644
--- a/drivers/mfd/rk8xx-core.c
+++ b/drivers/mfd/rk8xx-core.c
@@ -53,76 +53,68 @@ static const struct resource rk817_charger_resources[] = {
 };
 
 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 variant, unsigned int irq, struct regmap
 					     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");




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux