All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/5] Match data improvements for rt1711h driver
@ 2023-09-06  8:06 Biju Das
  2023-09-06  8:06 ` [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table Biju Das
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

This patch series extend support for retrieving match data for ID lookup
by using i2c_get_match_data().

The first patch is cleanups for OF/ID table and second patch
convert enum->pointer for constification of data and extending match data
support for ID table. The third and fourth patches replaces comparison of
did against hardware differences with data and feature variable. The last
patch drop CONFIG_OF ifdeffery.

This patch series is only compile tested.

v2->v3:
 * Added Rb tag from Andy.
 * Dropped updating I2C driver data in ID table as there is no user yet.
 * Updated commit header and description for patch#1
 * Updated commit description for ACPI with PRP0001 magic for patch#5.
v1->v2:
 * Drop space from ID table
 * Remove trailing comma in the terminator entry for OF table.
 * Updated commit description for patch#2.
 * Swapped the rxdz_sel variable in struct rt1711h_chip_info to avoid
   holes.
 * Changed enable_pd30_extended_message variable type to bool.
 * Added patch for dropping CONFIG_OF ifdeffery for OF table.

Biju Das (5):
  usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator
    entry for OF table
  usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match
    tables
  usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct
    rt1711h_chip_info
  usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message variable
    to struct rt1711h_chip_info
  usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery

 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 46 ++++++++++++++++----------
 1 file changed, 29 insertions(+), 17 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table
  2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
@ 2023-09-06  8:06 ` Biju Das
  2023-09-08  8:20   ` Heikki Krogerus
  2023-09-06  8:06 ` [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables Biju Das
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

Remove trailing comma in the terminator entry for OF table.
While at it, drop a space in the terminator for ID table.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2->v3:
 * Dropped updating I2C driver data in ID table as there is no user yet.
 * Updated commit header and description.
 * Added Rb tag from Andy.
 * Retained the Rb tag as it is trivial change.
v1->v2:
 * Drop space from ID table
 * Remove trailing comma in the terminator entry for OF table.
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 17ebc5fb684f..6146bca8e55f 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -394,7 +394,7 @@ static void rt1711h_remove(struct i2c_client *client)
 static const struct i2c_device_id rt1711h_id[] = {
 	{ "rt1711h", 0 },
 	{ "rt1715", 0 },
-	{ }
+	{}
 };
 MODULE_DEVICE_TABLE(i2c, rt1711h_id);
 
@@ -402,7 +402,7 @@ MODULE_DEVICE_TABLE(i2c, rt1711h_id);
 static const struct of_device_id rt1711h_of_match[] = {
 	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
 	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
-	{},
+	{}
 };
 MODULE_DEVICE_TABLE(of, rt1711h_of_match);
 #endif
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables
  2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
  2023-09-06  8:06 ` [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table Biju Das
@ 2023-09-06  8:06 ` Biju Das
  2023-09-08  8:48   ` Heikki Krogerus
  2023-09-06  8:06 ` [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info Biju Das
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

Currently did varaible is used for HW differences between the devices which
complicates the code by adding checks.

Therefore it is better to convert enum->pointer for data match and extend
match support for both ID and OF tables by using i2c_get_match_data().

Add struct rt1711h_chip_info with did variable and replace did->info in
struct rt1711h_chip. Later patch will add more hw differences to
struct rt1711h_chip_info and avoid checking did for HW differences.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2->v3:
 * Added Rb tag from Andy.
v1->v2:
 * Updated commit description.
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 30 ++++++++++++++++++--------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 6146bca8e55f..2b7258d3cb4e 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -51,13 +51,17 @@
 /* 1b0 as fixed rx threshold of rd/rp 0.55V, 1b1 depends on RTCRTL4[0] */
 #define BMCIO_RXDZEN	BIT(0)
 
+struct rt1711h_chip_info {
+	u16 did;
+};
+
 struct rt1711h_chip {
 	struct tcpci_data data;
 	struct tcpci *tcpci;
 	struct device *dev;
 	struct regulator *vbus;
+	const struct rt1711h_chip_info *info;
 	bool src_en;
-	u16 did;
 };
 
 static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
@@ -105,7 +109,7 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 		return ret;
 
 	/* Enable PD30 extended message for RT1715 */
-	if (chip->did == RT1715_DID) {
+	if (chip->info->did == RT1715_DID) {
 		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
 					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
 		if (ret < 0)
@@ -200,7 +204,7 @@ static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
 	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
 	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
 		rxdz_en = BMCIO_RXDZEN;
-		if (chip->did == RT1715_DID)
+		if (chip->info->did == RT1715_DID)
 			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
 		else
 			rxdz_sel = 0;
@@ -319,7 +323,7 @@ static int rt1711h_check_revision(struct i2c_client *i2c, struct rt1711h_chip *c
 	ret = i2c_smbus_read_word_data(i2c, TCPC_BCD_DEV);
 	if (ret < 0)
 		return ret;
-	if (ret != chip->did) {
+	if (ret != chip->info->did) {
 		dev_err(&i2c->dev, "did is not correct, 0x%04x\n", ret);
 		return -ENODEV;
 	}
@@ -336,7 +340,7 @@ static int rt1711h_probe(struct i2c_client *client)
 	if (!chip)
 		return -ENOMEM;
 
-	chip->did = (size_t)device_get_match_data(&client->dev);
+	chip->info = i2c_get_match_data(client);
 
 	ret = rt1711h_check_revision(client, chip);
 	if (ret < 0) {
@@ -391,17 +395,25 @@ static void rt1711h_remove(struct i2c_client *client)
 	tcpci_unregister_port(chip->tcpci);
 }
 
+static const struct rt1711h_chip_info rt1711h = {
+	.did = RT1711H_DID,
+};
+
+static const struct rt1711h_chip_info rt1715 = {
+	.did = RT1715_DID,
+};
+
 static const struct i2c_device_id rt1711h_id[] = {
-	{ "rt1711h", 0 },
-	{ "rt1715", 0 },
+	{ "rt1711h", (kernel_ulong_t)&rt1711h },
+	{ "rt1715", (kernel_ulong_t)&rt1715 },
 	{}
 };
 MODULE_DEVICE_TABLE(i2c, rt1711h_id);
 
 #ifdef CONFIG_OF
 static const struct of_device_id rt1711h_of_match[] = {
-	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
-	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
+	{ .compatible = "richtek,rt1711h", .data = &rt1711h },
+	{ .compatible = "richtek,rt1715", .data = &rt1715 },
 	{}
 };
 MODULE_DEVICE_TABLE(of, rt1711h_of_match);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info
  2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
  2023-09-06  8:06 ` [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table Biju Das
  2023-09-06  8:06 ` [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables Biju Das
@ 2023-09-06  8:06 ` Biju Das
  2023-09-08  8:49   ` Heikki Krogerus
  2023-09-06  8:06 ` [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message " Biju Das
  2023-09-06  8:06 ` [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery Biju Das
  4 siblings, 1 reply; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

The RT1715 needs 0.35V/0.75V rx threshold for rd/rp whereas it is 0.4V/0.7V
for RT1711H. Add rxdz_sel variable to struct rt1711h_chip_info for
handling this difference.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2->v3:
 * Added Rb tag from Andy.
v1->v2:
 * Swapped the rxdz_sel variable in struct rt1711h_chip_info to avoid
   holes.
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 2b7258d3cb4e..40822bae9ae8 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -52,6 +52,7 @@
 #define BMCIO_RXDZEN	BIT(0)
 
 struct rt1711h_chip_info {
+	u32 rxdz_sel;
 	u16 did;
 };
 
@@ -204,10 +205,7 @@ static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
 	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
 	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
 		rxdz_en = BMCIO_RXDZEN;
-		if (chip->info->did == RT1715_DID)
-			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
-		else
-			rxdz_sel = 0;
+		rxdz_sel = chip->info->rxdz_sel;
 	} else {
 		rxdz_en = 0;
 		rxdz_sel = RT1711H_BMCIO_RXDZSEL;
@@ -400,6 +398,7 @@ static const struct rt1711h_chip_info rt1711h = {
 };
 
 static const struct rt1711h_chip_info rt1715 = {
+	.rxdz_sel = RT1711H_BMCIO_RXDZSEL,
 	.did = RT1715_DID,
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message variable to struct rt1711h_chip_info
  2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
                   ` (2 preceding siblings ...)
  2023-09-06  8:06 ` [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info Biju Das
@ 2023-09-06  8:06 ` Biju Das
  2023-09-08 10:34   ` Heikki Krogerus
  2023-09-06  8:06 ` [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery Biju Das
  4 siblings, 1 reply; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

The RT1715 has PD30 extended message compared to RT1711H. Add a variable
enable_pd30_extended_message to struct rt1711h_chip_info to enable this
feature for RT1715.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2->v3:
 * Added Rb tag from Andy.
v1->v2:
 * Changed enable_pd30_extended_message variable type to bool.
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 40822bae9ae8..5d2dc7ead9d0 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -54,6 +54,7 @@
 struct rt1711h_chip_info {
 	u32 rxdz_sel;
 	u16 did;
+	bool enable_pd30_extended_message;
 };
 
 struct rt1711h_chip {
@@ -110,7 +111,7 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 		return ret;
 
 	/* Enable PD30 extended message for RT1715 */
-	if (chip->info->did == RT1715_DID) {
+	if (chip->info->enable_pd30_extended_message) {
 		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
 					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
 		if (ret < 0)
@@ -400,6 +401,7 @@ static const struct rt1711h_chip_info rt1711h = {
 static const struct rt1711h_chip_info rt1715 = {
 	.rxdz_sel = RT1711H_BMCIO_RXDZSEL,
 	.did = RT1715_DID,
+	.enable_pd30_extended_message = true,
 };
 
 static const struct i2c_device_id rt1711h_id[] = {
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery
  2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
                   ` (3 preceding siblings ...)
  2023-09-06  8:06 ` [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message " Biju Das
@ 2023-09-06  8:06 ` Biju Das
  2023-09-08 10:40   ` Heikki Krogerus
  4 siblings, 1 reply; 11+ messages in thread
From: Biju Das @ 2023-09-06  8:06 UTC (permalink / raw)
  To: Guenter Roeck, Heikki Krogerus
  Cc: Biju Das, Greg Kroah-Hartman, linux-usb, linux-kernel, Biju Das,
	Andy Shevchenko

Drop of_match_ptr() from rt1711h_of_match and get rid of ugly CONFIG_OF
ifdeffery. This slightly increases the size of rt1711h_of_match on non-OF
system and shouldn't be an issue.

It also allows, in case if needed, to enumerate this device via ACPI with
PRP0001 magic.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v2->v3:
 * Added Rb tag from Andy.
 * Updated commit description for ACPI with PRP0001 magic.
v2:
 * New patch
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 5d2dc7ead9d0..67422d45eb54 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -7,6 +7,7 @@
 
 #include <linux/bits.h>
 #include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
@@ -411,19 +412,17 @@ static const struct i2c_device_id rt1711h_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, rt1711h_id);
 
-#ifdef CONFIG_OF
 static const struct of_device_id rt1711h_of_match[] = {
 	{ .compatible = "richtek,rt1711h", .data = &rt1711h },
 	{ .compatible = "richtek,rt1715", .data = &rt1715 },
 	{}
 };
 MODULE_DEVICE_TABLE(of, rt1711h_of_match);
-#endif
 
 static struct i2c_driver rt1711h_i2c_driver = {
 	.driver = {
 		.name = "rt1711h",
-		.of_match_table = of_match_ptr(rt1711h_of_match),
+		.of_match_table = rt1711h_of_match,
 	},
 	.probe = rt1711h_probe,
 	.remove = rt1711h_remove,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table
  2023-09-06  8:06 ` [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table Biju Das
@ 2023-09-08  8:20   ` Heikki Krogerus
  0 siblings, 0 replies; 11+ messages in thread
From: Heikki Krogerus @ 2023-09-08  8:20 UTC (permalink / raw)
  To: Biju Das
  Cc: Guenter Roeck, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Biju Das, Andy Shevchenko

On Wed, Sep 06, 2023 at 09:06:15AM +0100, Biju Das wrote:
> Remove trailing comma in the terminator entry for OF table.
> While at it, drop a space in the terminator for ID table.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> v2->v3:
>  * Dropped updating I2C driver data in ID table as there is no user yet.
>  * Updated commit header and description.
>  * Added Rb tag from Andy.
>  * Retained the Rb tag as it is trivial change.
> v1->v2:
>  * Drop space from ID table
>  * Remove trailing comma in the terminator entry for OF table.
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 17ebc5fb684f..6146bca8e55f 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -394,7 +394,7 @@ static void rt1711h_remove(struct i2c_client *client)
>  static const struct i2c_device_id rt1711h_id[] = {
>  	{ "rt1711h", 0 },
>  	{ "rt1715", 0 },
> -	{ }
> +	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, rt1711h_id);
>  
> @@ -402,7 +402,7 @@ MODULE_DEVICE_TABLE(i2c, rt1711h_id);
>  static const struct of_device_id rt1711h_of_match[] = {
>  	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
>  	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
> -	{},
> +	{}
>  };
>  MODULE_DEVICE_TABLE(of, rt1711h_of_match);
>  #endif
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables
  2023-09-06  8:06 ` [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables Biju Das
@ 2023-09-08  8:48   ` Heikki Krogerus
  0 siblings, 0 replies; 11+ messages in thread
From: Heikki Krogerus @ 2023-09-08  8:48 UTC (permalink / raw)
  To: Biju Das
  Cc: Guenter Roeck, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Biju Das, Andy Shevchenko

On Wed, Sep 06, 2023 at 09:06:16AM +0100, Biju Das wrote:
> Currently did varaible is used for HW differences between the devices which
> complicates the code by adding checks.
> 
> Therefore it is better to convert enum->pointer for data match and extend
> match support for both ID and OF tables by using i2c_get_match_data().
> 
> Add struct rt1711h_chip_info with did variable and replace did->info in
> struct rt1711h_chip. Later patch will add more hw differences to
> struct rt1711h_chip_info and avoid checking did for HW differences.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> v2->v3:
>  * Added Rb tag from Andy.
> v1->v2:
>  * Updated commit description.
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 30 ++++++++++++++++++--------
>  1 file changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 6146bca8e55f..2b7258d3cb4e 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -51,13 +51,17 @@
>  /* 1b0 as fixed rx threshold of rd/rp 0.55V, 1b1 depends on RTCRTL4[0] */
>  #define BMCIO_RXDZEN	BIT(0)
>  
> +struct rt1711h_chip_info {
> +	u16 did;
> +};
> +
>  struct rt1711h_chip {
>  	struct tcpci_data data;
>  	struct tcpci *tcpci;
>  	struct device *dev;
>  	struct regulator *vbus;
> +	const struct rt1711h_chip_info *info;
>  	bool src_en;
> -	u16 did;
>  };
>  
>  static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
> @@ -105,7 +109,7 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  		return ret;
>  
>  	/* Enable PD30 extended message for RT1715 */
> -	if (chip->did == RT1715_DID) {
> +	if (chip->info->did == RT1715_DID) {
>  		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
>  					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
>  		if (ret < 0)
> @@ -200,7 +204,7 @@ static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
>  	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
>  	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
>  		rxdz_en = BMCIO_RXDZEN;
> -		if (chip->did == RT1715_DID)
> +		if (chip->info->did == RT1715_DID)
>  			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
>  		else
>  			rxdz_sel = 0;
> @@ -319,7 +323,7 @@ static int rt1711h_check_revision(struct i2c_client *i2c, struct rt1711h_chip *c
>  	ret = i2c_smbus_read_word_data(i2c, TCPC_BCD_DEV);
>  	if (ret < 0)
>  		return ret;
> -	if (ret != chip->did) {
> +	if (ret != chip->info->did) {
>  		dev_err(&i2c->dev, "did is not correct, 0x%04x\n", ret);
>  		return -ENODEV;
>  	}
> @@ -336,7 +340,7 @@ static int rt1711h_probe(struct i2c_client *client)
>  	if (!chip)
>  		return -ENOMEM;
>  
> -	chip->did = (size_t)device_get_match_data(&client->dev);
> +	chip->info = i2c_get_match_data(client);
>  
>  	ret = rt1711h_check_revision(client, chip);
>  	if (ret < 0) {
> @@ -391,17 +395,25 @@ static void rt1711h_remove(struct i2c_client *client)
>  	tcpci_unregister_port(chip->tcpci);
>  }
>  
> +static const struct rt1711h_chip_info rt1711h = {
> +	.did = RT1711H_DID,
> +};
> +
> +static const struct rt1711h_chip_info rt1715 = {
> +	.did = RT1715_DID,
> +};
> +
>  static const struct i2c_device_id rt1711h_id[] = {
> -	{ "rt1711h", 0 },
> -	{ "rt1715", 0 },
> +	{ "rt1711h", (kernel_ulong_t)&rt1711h },
> +	{ "rt1715", (kernel_ulong_t)&rt1715 },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(i2c, rt1711h_id);
>  
>  #ifdef CONFIG_OF
>  static const struct of_device_id rt1711h_of_match[] = {
> -	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
> -	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
> +	{ .compatible = "richtek,rt1711h", .data = &rt1711h },
> +	{ .compatible = "richtek,rt1715", .data = &rt1715 },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(of, rt1711h_of_match);
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info
  2023-09-06  8:06 ` [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info Biju Das
@ 2023-09-08  8:49   ` Heikki Krogerus
  0 siblings, 0 replies; 11+ messages in thread
From: Heikki Krogerus @ 2023-09-08  8:49 UTC (permalink / raw)
  To: Biju Das
  Cc: Guenter Roeck, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Biju Das, Andy Shevchenko

On Wed, Sep 06, 2023 at 09:06:17AM +0100, Biju Das wrote:
> The RT1715 needs 0.35V/0.75V rx threshold for rd/rp whereas it is 0.4V/0.7V
> for RT1711H. Add rxdz_sel variable to struct rt1711h_chip_info for
> handling this difference.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> v2->v3:
>  * Added Rb tag from Andy.
> v1->v2:
>  * Swapped the rxdz_sel variable in struct rt1711h_chip_info to avoid
>    holes.
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 2b7258d3cb4e..40822bae9ae8 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -52,6 +52,7 @@
>  #define BMCIO_RXDZEN	BIT(0)
>  
>  struct rt1711h_chip_info {
> +	u32 rxdz_sel;
>  	u16 did;
>  };
>  
> @@ -204,10 +205,7 @@ static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
>  	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
>  	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
>  		rxdz_en = BMCIO_RXDZEN;
> -		if (chip->info->did == RT1715_DID)
> -			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
> -		else
> -			rxdz_sel = 0;
> +		rxdz_sel = chip->info->rxdz_sel;
>  	} else {
>  		rxdz_en = 0;
>  		rxdz_sel = RT1711H_BMCIO_RXDZSEL;
> @@ -400,6 +398,7 @@ static const struct rt1711h_chip_info rt1711h = {
>  };
>  
>  static const struct rt1711h_chip_info rt1715 = {
> +	.rxdz_sel = RT1711H_BMCIO_RXDZSEL,
>  	.did = RT1715_DID,
>  };
>  
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message variable to struct rt1711h_chip_info
  2023-09-06  8:06 ` [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message " Biju Das
@ 2023-09-08 10:34   ` Heikki Krogerus
  0 siblings, 0 replies; 11+ messages in thread
From: Heikki Krogerus @ 2023-09-08 10:34 UTC (permalink / raw)
  To: Biju Das
  Cc: Guenter Roeck, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Biju Das, Andy Shevchenko

On Wed, Sep 06, 2023 at 09:06:18AM +0100, Biju Das wrote:
> The RT1715 has PD30 extended message compared to RT1711H. Add a variable
> enable_pd30_extended_message to struct rt1711h_chip_info to enable this
> feature for RT1715.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> v2->v3:
>  * Added Rb tag from Andy.
> v1->v2:
>  * Changed enable_pd30_extended_message variable type to bool.
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 40822bae9ae8..5d2dc7ead9d0 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -54,6 +54,7 @@
>  struct rt1711h_chip_info {
>  	u32 rxdz_sel;
>  	u16 did;
> +	bool enable_pd30_extended_message;
>  };
>  
>  struct rt1711h_chip {
> @@ -110,7 +111,7 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  		return ret;
>  
>  	/* Enable PD30 extended message for RT1715 */
> -	if (chip->info->did == RT1715_DID) {
> +	if (chip->info->enable_pd30_extended_message) {
>  		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
>  					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
>  		if (ret < 0)
> @@ -400,6 +401,7 @@ static const struct rt1711h_chip_info rt1711h = {
>  static const struct rt1711h_chip_info rt1715 = {
>  	.rxdz_sel = RT1711H_BMCIO_RXDZSEL,
>  	.did = RT1715_DID,
> +	.enable_pd30_extended_message = true,
>  };
>  
>  static const struct i2c_device_id rt1711h_id[] = {
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery
  2023-09-06  8:06 ` [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery Biju Das
@ 2023-09-08 10:40   ` Heikki Krogerus
  0 siblings, 0 replies; 11+ messages in thread
From: Heikki Krogerus @ 2023-09-08 10:40 UTC (permalink / raw)
  To: Biju Das
  Cc: Guenter Roeck, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Biju Das, Andy Shevchenko

On Wed, Sep 06, 2023 at 09:06:19AM +0100, Biju Das wrote:
> Drop of_match_ptr() from rt1711h_of_match and get rid of ugly CONFIG_OF
> ifdeffery. This slightly increases the size of rt1711h_of_match on non-OF
> system and shouldn't be an issue.
> 
> It also allows, in case if needed, to enumerate this device via ACPI with
> PRP0001 magic.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
> v2->v3:
>  * Added Rb tag from Andy.
>  * Updated commit description for ACPI with PRP0001 magic.
> v2:
>  * New patch
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 5d2dc7ead9d0..67422d45eb54 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -7,6 +7,7 @@
>  
>  #include <linux/bits.h>
>  #include <linux/kernel.h>
> +#include <linux/mod_devicetable.h>
>  #include <linux/module.h>
>  #include <linux/i2c.h>
>  #include <linux/interrupt.h>
> @@ -411,19 +412,17 @@ static const struct i2c_device_id rt1711h_id[] = {
>  };
>  MODULE_DEVICE_TABLE(i2c, rt1711h_id);
>  
> -#ifdef CONFIG_OF
>  static const struct of_device_id rt1711h_of_match[] = {
>  	{ .compatible = "richtek,rt1711h", .data = &rt1711h },
>  	{ .compatible = "richtek,rt1715", .data = &rt1715 },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(of, rt1711h_of_match);
> -#endif
>  
>  static struct i2c_driver rt1711h_i2c_driver = {
>  	.driver = {
>  		.name = "rt1711h",
> -		.of_match_table = of_match_ptr(rt1711h_of_match),
> +		.of_match_table = rt1711h_of_match,
>  	},
>  	.probe = rt1711h_probe,
>  	.remove = rt1711h_remove,
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-09-08 10:40 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-06  8:06 [PATCH v3 0/5] Match data improvements for rt1711h driver Biju Das
2023-09-06  8:06 ` [PATCH v3 1/5] usb: typec: tcpci_rt1711h: Remove trailing comma in the terminator entry for OF table Biju Das
2023-09-08  8:20   ` Heikki Krogerus
2023-09-06  8:06 ` [PATCH v3 2/5] usb: typec: tcpci_rt1711h: Convert enum->pointer for data in the match tables Biju Das
2023-09-08  8:48   ` Heikki Krogerus
2023-09-06  8:06 ` [PATCH v3 3/5] usb: typec: tcpci_rt1711h: Add rxdz_sel variable to struct rt1711h_chip_info Biju Das
2023-09-08  8:49   ` Heikki Krogerus
2023-09-06  8:06 ` [PATCH v3 4/5] usb: typec: tcpci_rt1711h: Add enable_pd30_extended_message " Biju Das
2023-09-08 10:34   ` Heikki Krogerus
2023-09-06  8:06 ` [PATCH v3 5/5] usb: typec: tcpci_rt1711h: Drop CONFIG_OF ifdeffery Biju Das
2023-09-08 10:40   ` Heikki Krogerus

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.