mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-25 16:13:05 +00:00
65 lines
2.0 KiB
Diff
65 lines
2.0 KiB
Diff
|
From 239f32b4f161c1584cd4b386d6ab8766432a6ede Mon Sep 17 00:00:00 2001
|
||
|
From: Eddie James <eajames@linux.ibm.com>
|
||
|
Date: Fri, 16 Jul 2021 17:03:31 -0500
|
||
|
Subject: [PATCH] leds: pca955x: Switch to i2c probe_new
|
||
|
|
||
|
The deprecated i2c probe functionality doesn't work with OF
|
||
|
compatible strings, as it only checks for the i2c device id. Switch
|
||
|
to the new way of probing and grab the match data to select the
|
||
|
chip type.
|
||
|
|
||
|
Signed-off-by: Eddie James <eajames@linux.ibm.com>
|
||
|
Signed-off-by: Pavel Machek <pavel@ucw.cz>
|
||
|
---
|
||
|
drivers/leds/leds-pca955x.c | 23 +++++++++++++++++++----
|
||
|
1 file changed, 19 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/leds/leds-pca955x.c b/drivers/leds/leds-pca955x.c
|
||
|
index a6aa4b9abde8c4..a6b5699aeae4fe 100644
|
||
|
--- a/drivers/leds/leds-pca955x.c
|
||
|
+++ b/drivers/leds/leds-pca955x.c
|
||
|
@@ -479,8 +479,7 @@ static const struct of_device_id of_pca955x_match[] = {
|
||
|
};
|
||
|
MODULE_DEVICE_TABLE(of, of_pca955x_match);
|
||
|
|
||
|
-static int pca955x_probe(struct i2c_client *client,
|
||
|
- const struct i2c_device_id *id)
|
||
|
+static int pca955x_probe(struct i2c_client *client)
|
||
|
{
|
||
|
struct pca955x *pca955x;
|
||
|
struct pca955x_led *pca955x_led;
|
||
|
@@ -494,8 +493,24 @@ static int pca955x_probe(struct i2c_client *client,
|
||
|
bool set_default_label = false;
|
||
|
bool keep_pwm = false;
|
||
|
char default_label[8];
|
||
|
+ enum pca955x_type chip_type;
|
||
|
+ const void *md = device_get_match_data(&client->dev);
|
||
|
|
||
|
- chip = &pca955x_chipdefs[id->driver_data];
|
||
|
+ if (md) {
|
||
|
+ chip_type = (enum pca955x_type)md;
|
||
|
+ } else {
|
||
|
+ const struct i2c_device_id *id = i2c_match_id(pca955x_id,
|
||
|
+ client);
|
||
|
+
|
||
|
+ if (id) {
|
||
|
+ chip_type = (enum pca955x_type)id->driver_data;
|
||
|
+ } else {
|
||
|
+ dev_err(&client->dev, "unknown chip\n");
|
||
|
+ return -ENODEV;
|
||
|
+ }
|
||
|
+ }
|
||
|
+
|
||
|
+ chip = &pca955x_chipdefs[chip_type];
|
||
|
adapter = client->adapter;
|
||
|
pdata = dev_get_platdata(&client->dev);
|
||
|
if (!pdata) {
|
||
|
@@ -670,7 +685,7 @@ static struct i2c_driver pca955x_driver = {
|
||
|
.name = "leds-pca955x",
|
||
|
.of_match_table = of_pca955x_match,
|
||
|
},
|
||
|
- .probe = pca955x_probe,
|
||
|
+ .probe_new = pca955x_probe,
|
||
|
.id_table = pca955x_id,
|
||
|
};
|