All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/24] i2c: designware: code consolidation & cleanups
@ 2023-11-20 14:41 Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe() Andy Shevchenko
                   ` (25 more replies)
  0 siblings, 26 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

The series now consists the following groups of patches:
- fixing cleanup order in error path and remove (patches 1-4)
- refactoring i2c_dw_*_lock_support() (patches 5-6)
- refactoring module alias and device ID tables (patches 7-10)
- unifying firmware parsing and configuring code (patches 11-15)
- miscellaneous cleanups (patches 16-17,21-24)
- consolidating PM ops (patch 18)
- using device_set_node() for all drivers (patches 19-20)

The "Consolidate PM ops" might be considered as rft, however I don't think
we have any hardware where the behaviour will be changed, anyways, good
to test.

Changelog v4:
- dropped first patch as controversial (Jarkko)
- dropped Fixes tag from a few patches (Jarkko)
- moved a hunk in patch 1 to patch 2 where it belongs (Jarkko)
- exported i2c_dw_disable() for modular building (Jarkko)
- added tags (Mario, Jarkko)

v3: https://lore.kernel.org/r/20231110182304.3894319-1-andriy.shevchenko@linux.intel.com

Changelog v3:
- doubled the size of the series
- fixed compilation error (LKP)
- added tags (Andi)

v2: https://lore.kernel.org/r/20231109182823.3531846-1-andriy.shevchenko@linux.intel.com

Changelog v2:
- reworked the series to make it less twisted (Jarkko, Andi)
- added tags to the patches that have been rebased (Andi, Mario, Jarkko)
- introduced a few new changes (PM ops, export namespace)

v1: https://lore.kernel.org/r/20230725143023.86325-1-andriy.shevchenko@linux.intel.com

Andy Shevchenko (24):
  i2c: designware: Fix PM calls order in dw_i2c_plat_probe()
  i2c: designware: Fix reset call order in dw_i2c_plat_probe()
  i2c: designware: Let PCI core to take care about interrupt vectors
  i2c: designware: Fix lock probe call order in dw_i2c_plat_probe()
  i2c: designware: Replace a while-loop by for-loop
  i2c: designware: Save pointer to semaphore callbacks instead of index
  i2c: designware: Add missing 'c' into PCI IDs variable name
  i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE()
  i2c: designware: Unify terminator in device ID tables
  i2c: designware: Always provide device ID tables
  i2c: designware: Drop return value from i2c_dw_acpi_configure()
  i2c: designware: Drop return value from dw_i2c_of_configure()
  i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure()
  i2c: designware: Consolidate firmware parsing and configuring code
  i2c: designware: Unify the firmware type checks
  i2c: designware: Move exports to I2C_DW namespaces
  i2c: designware: Remove ->disable() callback
  i2c: designware: Consolidate PM ops
  i2c: designware: Uninline i2c_dw_probe()
  i2c: designware: Propagate firmware node
  i2c: designware: Use pci_get_drvdata()
  i2c: designware: Use temporary variable for struct device
  i2c: designware: Get rid of redundant 'else'
  i2c: designware: Fix spelling and other issues in the comments

 drivers/i2c/busses/i2c-designware-amdpsp.c  |  10 +-
 drivers/i2c/busses/i2c-designware-common.c  | 167 +++++++++-
 drivers/i2c/busses/i2c-designware-core.h    |  47 +--
 drivers/i2c/busses/i2c-designware-master.c  |  19 +-
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 114 ++-----
 drivers/i2c/busses/i2c-designware-platdrv.c | 337 +++++++-------------
 drivers/i2c/busses/i2c-designware-slave.c   |  12 +-
 7 files changed, 337 insertions(+), 369 deletions(-)

-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 21:48   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 02/24] i2c: designware: Fix reset call " Andy Shevchenko
                   ` (24 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

We should not mix managed calls with non-managed. This will break
the calls order at the error path and ->remove() stages. Fix this
by wrapping PM ops to become managed one.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 26 ++++++++++++++-------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 855b698e99c0..fd3cd65f9c88 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -177,14 +177,26 @@ static int txgbe_i2c_request_regs(struct dw_i2c_dev *dev)
 	return 0;
 }
 
-static void dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *dev)
+static void dw_i2c_plat_pm_cleanup(void *data)
 {
+	struct dw_i2c_dev *dev = data;
+
 	pm_runtime_disable(dev->dev);
 
 	if (dev->shared_with_punit)
 		pm_runtime_put_noidle(dev->dev);
 }
 
+static int dw_i2c_plat_pm_setup(struct dw_i2c_dev *dev)
+{
+	if (dev->shared_with_punit)
+		pm_runtime_get_noresume(dev->dev);
+
+	pm_runtime_enable(dev->dev);
+
+	return devm_add_action_or_reset(dev->dev, dw_i2c_plat_pm_cleanup, dev);
+}
+
 static int dw_i2c_plat_request_regs(struct dw_i2c_dev *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev->dev);
@@ -381,19 +393,16 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	pm_runtime_use_autosuspend(&pdev->dev);
 	pm_runtime_set_active(&pdev->dev);
 
-	if (dev->shared_with_punit)
-		pm_runtime_get_noresume(&pdev->dev);
-
-	pm_runtime_enable(&pdev->dev);
+	ret = dw_i2c_plat_pm_setup(dev);
+	if (ret)
+		goto exit_reset;
 
 	ret = i2c_dw_probe(dev);
 	if (ret)
-		goto exit_probe;
+		goto exit_reset;
 
 	return ret;
 
-exit_probe:
-	dw_i2c_plat_pm_cleanup(dev);
 exit_reset:
 	reset_control_assert(dev->rst);
 	return ret;
@@ -411,7 +420,6 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
 
 	pm_runtime_dont_use_autosuspend(&pdev->dev);
 	pm_runtime_put_sync(&pdev->dev);
-	dw_i2c_plat_pm_cleanup(dev);
 
 	i2c_dw_remove_lock_support(dev);
 
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 02/24] i2c: designware: Fix reset call order in dw_i2c_plat_probe()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 21:57   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors Andy Shevchenko
                   ` (23 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

We should not mix managed calls with non-managed. This will break
the calls order at the error path and ->remove() stages. Fix this
by wrapping reset control to become managed one.

With that start checking the rerurn code from reset_control_deassert()
as it may fail and calling assertion in that scenario is not always
a good idea.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 62 +++++++++++----------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index fd3cd65f9c88..648fb84e574d 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -285,6 +285,28 @@ static void i2c_dw_remove_lock_support(struct dw_i2c_dev *dev)
 		i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove(dev);
 }
 
+static void dw_i2c_plat_assert_reset(void *data)
+{
+	struct dw_i2c_dev *dev = data;
+
+	reset_control_assert(dev->rst);
+}
+
+static int dw_i2c_plat_get_reset(struct dw_i2c_dev *dev)
+{
+	int ret;
+
+	dev->rst = devm_reset_control_get_optional_exclusive(dev->dev, NULL);
+	if (IS_ERR(dev->rst))
+		return PTR_ERR(dev->rst);
+
+	ret = reset_control_deassert(dev->rst);
+	if (ret)
+		return ret;
+
+	return devm_add_action_or_reset(dev->dev, dw_i2c_plat_assert_reset, dev);
+}
+
 static int dw_i2c_plat_probe(struct platform_device *pdev)
 {
 	struct i2c_adapter *adap;
@@ -312,11 +334,9 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	dev->rst = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
-	if (IS_ERR(dev->rst))
-		return PTR_ERR(dev->rst);
-
-	reset_control_deassert(dev->rst);
+	ret = dw_i2c_plat_get_reset(dev);
+	if (ret)
+		return ret;
 
 	t = &dev->timings;
 	i2c_parse_fw_timings(&pdev->dev, t, false);
@@ -331,30 +351,26 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 
 	ret = i2c_dw_validate_speed(dev);
 	if (ret)
-		goto exit_reset;
+		return ret;
 
 	ret = i2c_dw_probe_lock_support(dev);
 	if (ret)
-		goto exit_reset;
+		return ret;
 
 	i2c_dw_configure(dev);
 
 	/* Optional interface clock */
 	dev->pclk = devm_clk_get_optional(&pdev->dev, "pclk");
-	if (IS_ERR(dev->pclk)) {
-		ret = PTR_ERR(dev->pclk);
-		goto exit_reset;
-	}
+	if (IS_ERR(dev->pclk))
+		return PTR_ERR(dev->pclk);
 
 	dev->clk = devm_clk_get_optional(&pdev->dev, NULL);
-	if (IS_ERR(dev->clk)) {
-		ret = PTR_ERR(dev->clk);
-		goto exit_reset;
-	}
+	if (IS_ERR(dev->clk))
+		return PTR_ERR(dev->clk);
 
 	ret = i2c_dw_prepare_clk(dev, true);
 	if (ret)
-		goto exit_reset;
+		return ret;
 
 	if (dev->clk) {
 		u64 clk_khz;
@@ -395,17 +411,9 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 
 	ret = dw_i2c_plat_pm_setup(dev);
 	if (ret)
-		goto exit_reset;
+		return ret;
 
-	ret = i2c_dw_probe(dev);
-	if (ret)
-		goto exit_reset;
-
-	return ret;
-
-exit_reset:
-	reset_control_assert(dev->rst);
-	return ret;
+	return i2c_dw_probe(dev);
 }
 
 static void dw_i2c_plat_remove(struct platform_device *pdev)
@@ -422,8 +430,6 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
 	pm_runtime_put_sync(&pdev->dev);
 
 	i2c_dw_remove_lock_support(dev);
-
-	reset_control_assert(dev->rst);
 }
 
 static int dw_i2c_plat_prepare(struct device *dev)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe() Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 02/24] i2c: designware: Fix reset call " Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 22:03   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe() Andy Shevchenko
                   ` (22 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

PCI core, after pcim_enable_device(), takes care about the allocated
IRQ vectors, no need to do it explicitly and break the cleaning up
order.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 61d7a27aa070..e67956845c19 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -295,10 +295,8 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 
 	if (controller->setup) {
 		r = controller->setup(pdev, controller);
-		if (r) {
-			pci_free_irq_vectors(pdev);
+		if (r)
 			return r;
-		}
 	}
 
 	i2c_dw_adjust_bus_speed(dev);
@@ -307,10 +305,8 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 		i2c_dw_acpi_configure(&pdev->dev);
 
 	r = i2c_dw_validate_speed(dev);
-	if (r) {
-		pci_free_irq_vectors(pdev);
+	if (r)
 		return r;
-	}
 
 	i2c_dw_configure(dev);
 
@@ -330,10 +326,8 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	adap->nr = controller->bus_num;
 
 	r = i2c_dw_probe(dev);
-	if (r) {
-		pci_free_irq_vectors(pdev);
+	if (r)
 		return r;
-	}
 
 	if ((dev->flags & MODEL_MASK) == MODEL_AMD_NAVI_GPU) {
 		dev->slave = i2c_new_ccgx_ucsi(&dev->adapter, dev->irq, &dgpu_node);
@@ -359,8 +353,6 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev)
 	pm_runtime_get_noresume(&pdev->dev);
 
 	i2c_del_adapter(&dev->adapter);
-	devm_free_irq(&pdev->dev, dev->irq, dev);
-	pci_free_irq_vectors(pdev);
 }
 
 static const struct pci_device_id i2_designware_pci_ids[] = {
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (2 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 22:23   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop Andy Shevchenko
                   ` (21 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

We should not mix managed calls with non-managed. This will break
the calls order at the error path and ->remove() stages. Fix this
by wrapping lock probe to become managed one.

Fixes: 78d5e9e299e3 ("i2c: designware: Add AMD PSP I2C bus support")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 24 ++++++++++-----------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 648fb84e574d..63cc3cdca2c7 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -243,6 +243,17 @@ static const struct i2c_dw_semaphore_callbacks i2c_dw_semaphore_cb_table[] = {
 	{}
 };
 
+static void i2c_dw_remove_lock_support(void *data)
+{
+	struct dw_i2c_dev *dev = data;
+
+	if (dev->semaphore_idx < 0)
+		return;
+
+	if (i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove)
+		i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove(dev);
+}
+
 static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 {
 	const struct i2c_dw_semaphore_callbacks *ptr;
@@ -273,16 +284,7 @@ static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 		break;
 	}
 
-	return 0;
-}
-
-static void i2c_dw_remove_lock_support(struct dw_i2c_dev *dev)
-{
-	if (dev->semaphore_idx < 0)
-		return;
-
-	if (i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove)
-		i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove(dev);
+	return devm_add_action_or_reset(dev->dev, i2c_dw_remove_lock_support, dev);
 }
 
 static void dw_i2c_plat_assert_reset(void *data)
@@ -428,8 +430,6 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
 
 	pm_runtime_dont_use_autosuspend(&pdev->dev);
 	pm_runtime_put_sync(&pdev->dev);
-
-	i2c_dw_remove_lock_support(dev);
 }
 
 static int dw_i2c_plat_prepare(struct device *dev)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (3 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 22:27   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index Andy Shevchenko
                   ` (20 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Replace a while-loop by for-loop in i2c_dw_probe_lock_support() to
save a few lines of code.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 63cc3cdca2c7..cb954f11540e 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -260,11 +260,9 @@ static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 	int i = 0;
 	int ret;
 
-	ptr = i2c_dw_semaphore_cb_table;
-
 	dev->semaphore_idx = -1;
 
-	while (ptr->probe) {
+	for (ptr = i2c_dw_semaphore_cb_table; ptr->probe; ptr++) {
 		ret = ptr->probe(dev);
 		if (ret) {
 			/*
@@ -276,7 +274,6 @@ static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 				return ret;
 
 			i++;
-			ptr++;
 			continue;
 		}
 
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (4 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-26 22:38   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name Andy Shevchenko
                   ` (19 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Instead of saving index and do an additional level of referencing,
save just a pointer to the semaphore callbacks directly. It makes
code cleaner.

Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-core.h    |  4 +++-
 drivers/i2c/busses/i2c-designware-platdrv.c | 12 ++++--------
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index a7f6f3eafad7..f8dd87cb0ae9 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -187,6 +187,8 @@ struct clk;
 struct device;
 struct reset_control;
 
+struct i2c_dw_semaphore_callbacks;
+
 /**
  * struct dw_i2c_dev - private i2c-designware data
  * @dev: driver model device node
@@ -291,7 +293,7 @@ struct dw_i2c_dev {
 	u16			hs_lcnt;
 	int			(*acquire_lock)(void);
 	void			(*release_lock)(void);
-	int			semaphore_idx;
+	const struct i2c_dw_semaphore_callbacks *semaphore_cb;
 	bool			shared_with_punit;
 	void			(*disable)(struct dw_i2c_dev *dev);
 	int			(*init)(struct dw_i2c_dev *dev);
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index cb954f11540e..4b5e58e1ce5b 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -247,21 +247,18 @@ static void i2c_dw_remove_lock_support(void *data)
 {
 	struct dw_i2c_dev *dev = data;
 
-	if (dev->semaphore_idx < 0)
+	if (!dev->semaphore_cb)
 		return;
 
-	if (i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove)
-		i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove(dev);
+	if (dev->semaphore_cb->remove)
+		dev->semaphore_cb->remove(dev);
 }
 
 static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 {
 	const struct i2c_dw_semaphore_callbacks *ptr;
-	int i = 0;
 	int ret;
 
-	dev->semaphore_idx = -1;
-
 	for (ptr = i2c_dw_semaphore_cb_table; ptr->probe; ptr++) {
 		ret = ptr->probe(dev);
 		if (ret) {
@@ -273,11 +270,10 @@ static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev)
 			if (ret != -ENODEV)
 				return ret;
 
-			i++;
 			continue;
 		}
 
-		dev->semaphore_idx = i;
+		dev->semaphore_cb = ptr;
 		break;
 	}
 
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (5 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-27 23:54   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 08/24] i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE() Andy Shevchenko
                   ` (18 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Add missing 'c' into i2c_designware_pci_ids variable name.

Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index e67956845c19..ed2f9e7ba5d3 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -355,7 +355,7 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev)
 	i2c_del_adapter(&dev->adapter);
 }
 
-static const struct pci_device_id i2_designware_pci_ids[] = {
+static const struct pci_device_id i2c_designware_pci_ids[] = {
 	/* Medfield */
 	{ PCI_VDEVICE(INTEL, 0x0817), medfield },
 	{ PCI_VDEVICE(INTEL, 0x0818), medfield },
@@ -403,16 +403,16 @@ static const struct pci_device_id i2_designware_pci_ids[] = {
 	{ PCI_VDEVICE(ATI,  0x7464), navi_amd },
 	{ 0,}
 };
-MODULE_DEVICE_TABLE(pci, i2_designware_pci_ids);
+MODULE_DEVICE_TABLE(pci, i2c_designware_pci_ids);
 
 static struct pci_driver dw_i2c_driver = {
 	.name		= DRIVER_NAME,
-	.id_table	= i2_designware_pci_ids,
 	.probe		= i2c_dw_pci_probe,
 	.remove		= i2c_dw_pci_remove,
 	.driver         = {
 		.pm     = &i2c_dw_pm_ops,
 	},
+	.id_table	= i2c_designware_pci_ids,
 };
 module_pci_driver(dw_i2c_driver);
 
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 08/24] i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (6 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables Andy Shevchenko
                   ` (17 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

As Krzysztof Kozlowski pointed out the better is to use
MODULE_DEVICE_TABLE() as it will be consistent with the content
of the real ID table of the platform devices.

While at it, drop unneeded and unused module alias in PCI glue
driver as PCI already has its own ID table and automatic loading
should just work.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 2 --
 drivers/i2c/busses/i2c-designware-platdrv.c | 8 ++++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index ed2f9e7ba5d3..35eba432bd08 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -416,8 +416,6 @@ static struct pci_driver dw_i2c_driver = {
 };
 module_pci_driver(dw_i2c_driver);
 
-/* Work with hotplug and coldplug */
-MODULE_ALIAS("i2c_designware-pci");
 MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>");
 MODULE_DESCRIPTION("Synopsys DesignWare PCI I2C bus adapter");
 MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 4b5e58e1ce5b..5d8427ccc9b4 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -486,8 +486,11 @@ static const struct dev_pm_ops dw_i2c_dev_pm_ops = {
 	RUNTIME_PM_OPS(dw_i2c_plat_runtime_suspend, dw_i2c_plat_runtime_resume, NULL)
 };
 
-/* Work with hotplug and coldplug */
-MODULE_ALIAS("platform:i2c_designware");
+static const struct platform_device_id dw_i2c_platform_ids[] = {
+	{ "i2c_designware" },
+	{}
+};
+MODULE_DEVICE_TABLE(platform, dw_i2c_platform_ids);
 
 static struct platform_driver dw_i2c_driver = {
 	.probe = dw_i2c_plat_probe,
@@ -498,6 +501,7 @@ static struct platform_driver dw_i2c_driver = {
 		.acpi_match_table = ACPI_PTR(dw_i2c_acpi_match),
 		.pm	= pm_ptr(&dw_i2c_dev_pm_ops),
 	},
+	.id_table = dw_i2c_platform_ids,
 };
 
 static int __init dw_i2c_init_driver(void)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (7 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 08/24] i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-27 23:56   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 10/24] i2c: designware: Always provide " Andy Shevchenko
                   ` (16 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Make the terminator entry look the same in all device ID tables.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 2 +-
 drivers/i2c/busses/i2c-designware-platdrv.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 35eba432bd08..cf736a8b9023 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -401,7 +401,7 @@ static const struct pci_device_id i2c_designware_pci_ids[] = {
 	{ PCI_VDEVICE(ATI,  0x73c4), navi_amd },
 	{ PCI_VDEVICE(ATI,  0x7444), navi_amd },
 	{ PCI_VDEVICE(ATI,  0x7464), navi_amd },
-	{ 0,}
+	{}
 };
 MODULE_DEVICE_TABLE(pci, i2c_designware_pci_ids);
 
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 5d8427ccc9b4..018c353a456a 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -57,7 +57,7 @@ static const struct acpi_device_id dw_i2c_acpi_match[] = {
 	{ "HISI02A2", 0 },
 	{ "HISI02A3", 0 },
 	{ "HYGO0010", ACCESS_INTR_MASK },
-	{ }
+	{}
 };
 MODULE_DEVICE_TABLE(acpi, dw_i2c_acpi_match);
 #endif
@@ -153,7 +153,7 @@ static const struct of_device_id dw_i2c_of_match[] = {
 	{ .compatible = "snps,designware-i2c", },
 	{ .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT },
 	{ .compatible = "baikal,bt1-sys-i2c", .data = (void *)MODEL_BAIKAL_BT1 },
-	{},
+	{}
 };
 MODULE_DEVICE_TABLE(of, dw_i2c_of_match);
 #else
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 10/24] i2c: designware: Always provide device ID tables
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (8 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 11/24] i2c: designware: Drop return value from i2c_dw_acpi_configure() Andy Shevchenko
                   ` (15 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

There is no need to have ugly ifdeffery and additional macros
for the device ID tables. Always provide them. Since we touch
the ACPI table, make it sorted by ID.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 62 ++++++++++-----------
 1 file changed, 30 insertions(+), 32 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 018c353a456a..15f19ec20b33 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -40,28 +40,6 @@ static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev)
 	return clk_get_rate(dev->clk) / KILO;
 }
 
-#ifdef CONFIG_ACPI
-static const struct acpi_device_id dw_i2c_acpi_match[] = {
-	{ "INT33C2", 0 },
-	{ "INT33C3", 0 },
-	{ "INT3432", 0 },
-	{ "INT3433", 0 },
-	{ "80860F41", ACCESS_NO_IRQ_SUSPEND },
-	{ "808622C1", ACCESS_NO_IRQ_SUSPEND },
-	{ "AMD0010", ACCESS_INTR_MASK },
-	{ "AMDI0010", ACCESS_INTR_MASK },
-	{ "AMDI0019", ACCESS_INTR_MASK | ARBITRATION_SEMAPHORE },
-	{ "AMDI0510", 0 },
-	{ "APMC0D0F", 0 },
-	{ "HISI02A1", 0 },
-	{ "HISI02A2", 0 },
-	{ "HISI02A3", 0 },
-	{ "HYGO0010", ACCESS_INTR_MASK },
-	{}
-};
-MODULE_DEVICE_TABLE(acpi, dw_i2c_acpi_match);
-#endif
-
 #ifdef CONFIG_OF
 #define BT1_I2C_CTL			0x100
 #define BT1_I2C_CTL_ADDR_MASK		GENMASK(7, 0)
@@ -148,14 +126,6 @@ static int dw_i2c_of_configure(struct platform_device *pdev)
 
 	return 0;
 }
-
-static const struct of_device_id dw_i2c_of_match[] = {
-	{ .compatible = "snps,designware-i2c", },
-	{ .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT },
-	{ .compatible = "baikal,bt1-sys-i2c", .data = (void *)MODEL_BAIKAL_BT1 },
-	{}
-};
-MODULE_DEVICE_TABLE(of, dw_i2c_of_match);
 #else
 static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
 {
@@ -486,6 +456,34 @@ static const struct dev_pm_ops dw_i2c_dev_pm_ops = {
 	RUNTIME_PM_OPS(dw_i2c_plat_runtime_suspend, dw_i2c_plat_runtime_resume, NULL)
 };
 
+static const struct of_device_id dw_i2c_of_match[] = {
+	{ .compatible = "snps,designware-i2c", },
+	{ .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT },
+	{ .compatible = "baikal,bt1-sys-i2c", .data = (void *)MODEL_BAIKAL_BT1 },
+	{}
+};
+MODULE_DEVICE_TABLE(of, dw_i2c_of_match);
+
+static const struct acpi_device_id dw_i2c_acpi_match[] = {
+	{ "80860F41", ACCESS_NO_IRQ_SUSPEND },
+	{ "808622C1", ACCESS_NO_IRQ_SUSPEND },
+	{ "AMD0010", ACCESS_INTR_MASK },
+	{ "AMDI0010", ACCESS_INTR_MASK },
+	{ "AMDI0019", ACCESS_INTR_MASK | ARBITRATION_SEMAPHORE },
+	{ "AMDI0510", 0 },
+	{ "APMC0D0F", 0 },
+	{ "HISI02A1", 0 },
+	{ "HISI02A2", 0 },
+	{ "HISI02A3", 0 },
+	{ "HYGO0010", ACCESS_INTR_MASK },
+	{ "INT33C2", 0 },
+	{ "INT33C3", 0 },
+	{ "INT3432", 0 },
+	{ "INT3433", 0 },
+	{}
+};
+MODULE_DEVICE_TABLE(acpi, dw_i2c_acpi_match);
+
 static const struct platform_device_id dw_i2c_platform_ids[] = {
 	{ "i2c_designware" },
 	{}
@@ -497,8 +495,8 @@ static struct platform_driver dw_i2c_driver = {
 	.remove_new = dw_i2c_plat_remove,
 	.driver		= {
 		.name	= "i2c_designware",
-		.of_match_table = of_match_ptr(dw_i2c_of_match),
-		.acpi_match_table = ACPI_PTR(dw_i2c_acpi_match),
+		.of_match_table = dw_i2c_of_match,
+		.acpi_match_table = dw_i2c_acpi_match,
 		.pm	= pm_ptr(&dw_i2c_dev_pm_ops),
 	},
 	.id_table = dw_i2c_platform_ids,
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 11/24] i2c: designware: Drop return value from i2c_dw_acpi_configure()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (9 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 10/24] i2c: designware: Always provide " Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 12/24] i2c: designware: Drop return value from dw_i2c_of_configure() Andy Shevchenko
                   ` (14 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

i2c_dw_acpi_configure() is called without checking of the returned
value, hence just drop it by converting to void.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c | 4 +---
 drivers/i2c/busses/i2c-designware-core.h   | 4 ++--
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 35f762872b8a..7a53a732981b 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -255,7 +255,7 @@ static void i2c_dw_acpi_params(struct device *device, char method[],
 	kfree(buf.pointer);
 }
 
-int i2c_dw_acpi_configure(struct device *device)
+void i2c_dw_acpi_configure(struct device *device)
 {
 	struct dw_i2c_dev *dev = dev_get_drvdata(device);
 	struct i2c_timings *t = &dev->timings;
@@ -285,8 +285,6 @@ int i2c_dw_acpi_configure(struct device *device)
 		dev->sda_hold_time = fs_ht;
 		break;
 	}
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(i2c_dw_acpi_configure);
 
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index f8dd87cb0ae9..b7884f15e0e9 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -399,7 +399,7 @@ int i2c_dw_validate_speed(struct dw_i2c_dev *dev);
 void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev);
 
 #if IS_ENABLED(CONFIG_ACPI)
-int i2c_dw_acpi_configure(struct device *device);
+void i2c_dw_acpi_configure(struct device *device);
 #else
-static inline int i2c_dw_acpi_configure(struct device *device) { return -ENODEV; }
+static inline void i2c_dw_acpi_configure(struct device *device) { }
 #endif
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 12/24] i2c: designware: Drop return value from dw_i2c_of_configure()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (10 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 11/24] i2c: designware: Drop return value from i2c_dw_acpi_configure() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 13/24] i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure() Andy Shevchenko
                   ` (13 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

dw_i2c_of_configure() is called without checking of the returned
value, hence just drop it by converting to void.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 15f19ec20b33..7449f1b37ecf 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -110,7 +110,7 @@ static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev)
 	return 0;
 }
 
-static int dw_i2c_of_configure(struct platform_device *pdev)
+static void dw_i2c_of_configure(struct platform_device *pdev)
 {
 	struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
 
@@ -123,8 +123,6 @@ static int dw_i2c_of_configure(struct platform_device *pdev)
 	default:
 		break;
 	}
-
-	return 0;
 }
 #else
 static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
@@ -132,9 +130,8 @@ static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
 	return -ENODEV;
 }
 
-static inline int dw_i2c_of_configure(struct platform_device *pdev)
+static inline void dw_i2c_of_configure(struct platform_device *pdev)
 {
-	return -ENODEV;
 }
 #endif
 
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 13/24] i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (11 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 12/24] i2c: designware: Drop return value from dw_i2c_of_configure() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 14/24] i2c: designware: Consolidate firmware parsing and configuring code Andy Shevchenko
                   ` (12 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

For the sake of consistency, rename dw_i2c_of_configure() and change
its parameter to be aligned with the i2c_dw_acpi_configure().

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 7449f1b37ecf..b8606b651feb 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -110,9 +110,10 @@ static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev)
 	return 0;
 }
 
-static void dw_i2c_of_configure(struct platform_device *pdev)
+static void i2c_dw_of_configure(struct device *device)
 {
-	struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
+	struct platform_device *pdev = to_platform_device(device);
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
 
 	switch (dev->flags & MODEL_MASK) {
 	case MODEL_MSCC_OCELOT:
@@ -130,7 +131,7 @@ static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
 	return -ENODEV;
 }
 
-static inline void dw_i2c_of_configure(struct platform_device *pdev)
+static inline void i2c_dw_of_configure(struct device *device)
 {
 }
 #endif
@@ -306,7 +307,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	i2c_dw_adjust_bus_speed(dev);
 
 	if (pdev->dev.of_node)
-		dw_i2c_of_configure(pdev);
+		i2c_dw_of_configure(&pdev->dev);
 
 	if (has_acpi_companion(&pdev->dev))
 		i2c_dw_acpi_configure(&pdev->dev);
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 14/24] i2c: designware: Consolidate firmware parsing and configuring code
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (12 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 13/24] i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure() Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 15/24] i2c: designware: Unify the firmware type checks Andy Shevchenko
                   ` (11 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

We have the same code flows in the PCI and plaform drivers. Moreover,
the flow requires the common code to export a few functions. Instead,
consolidate that flow under new function called
i2c_dw_fw_parse_and_configure() and drop unneeded exports.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c  | 68 +++++++++++++++++++--
 drivers/i2c/busses/i2c-designware-core.h    |  9 +--
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 11 +---
 drivers/i2c/busses/i2c-designware-platdrv.c | 48 +--------------
 4 files changed, 66 insertions(+), 70 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 7a53a732981b..d3ddfec46200 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -20,6 +20,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/swab.h>
@@ -188,7 +189,7 @@ static const u32 supported_speeds[] = {
 	I2C_MAX_STANDARD_MODE_FREQ,
 };
 
-int i2c_dw_validate_speed(struct dw_i2c_dev *dev)
+static int i2c_dw_validate_speed(struct dw_i2c_dev *dev)
 {
 	struct i2c_timings *t = &dev->timings;
 	unsigned int i;
@@ -208,7 +209,44 @@ int i2c_dw_validate_speed(struct dw_i2c_dev *dev)
 
 	return -EINVAL;
 }
-EXPORT_SYMBOL_GPL(i2c_dw_validate_speed);
+
+#ifdef CONFIG_OF
+
+#include <linux/platform_device.h>
+
+#define MSCC_ICPU_CFG_TWI_DELAY		0x0
+#define MSCC_ICPU_CFG_TWI_DELAY_ENABLE	BIT(0)
+#define MSCC_ICPU_CFG_TWI_SPIKE_FILTER	0x4
+
+static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev)
+{
+	writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE,
+	       dev->ext + MSCC_ICPU_CFG_TWI_DELAY);
+
+	return 0;
+}
+
+static void i2c_dw_of_configure(struct device *device)
+{
+	struct platform_device *pdev = to_platform_device(device);
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
+
+	switch (dev->flags & MODEL_MASK) {
+	case MODEL_MSCC_OCELOT:
+		dev->ext = devm_platform_ioremap_resource(pdev, 1);
+		if (!IS_ERR(dev->ext))
+			dev->set_sda_hold_time = mscc_twi_set_sda_hold_time;
+		break;
+	default:
+		break;
+	}
+}
+
+#else	/* CONFIG_OF */
+
+static inline void i2c_dw_of_configure(struct device *device) { }
+
+#endif	/* CONFIG_OF */
 
 #ifdef CONFIG_ACPI
 
@@ -255,7 +293,7 @@ static void i2c_dw_acpi_params(struct device *device, char method[],
 	kfree(buf.pointer);
 }
 
-void i2c_dw_acpi_configure(struct device *device)
+static void i2c_dw_acpi_configure(struct device *device)
 {
 	struct dw_i2c_dev *dev = dev_get_drvdata(device);
 	struct i2c_timings *t = &dev->timings;
@@ -286,7 +324,6 @@ void i2c_dw_acpi_configure(struct device *device)
 		break;
 	}
 }
-EXPORT_SYMBOL_GPL(i2c_dw_acpi_configure);
 
 static u32 i2c_dw_acpi_round_bus_speed(struct device *device)
 {
@@ -308,11 +345,13 @@ static u32 i2c_dw_acpi_round_bus_speed(struct device *device)
 
 #else	/* CONFIG_ACPI */
 
+static inline void i2c_dw_acpi_configure(struct device *device) { }
+
 static inline u32 i2c_dw_acpi_round_bus_speed(struct device *device) { return 0; }
 
 #endif	/* CONFIG_ACPI */
 
-void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev)
+static void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev)
 {
 	u32 acpi_speed = i2c_dw_acpi_round_bus_speed(dev->dev);
 	struct i2c_timings *t = &dev->timings;
@@ -328,7 +367,24 @@ void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev)
 	else
 		t->bus_freq_hz = I2C_MAX_FAST_MODE_FREQ;
 }
-EXPORT_SYMBOL_GPL(i2c_dw_adjust_bus_speed);
+
+int i2c_dw_fw_parse_and_configure(struct dw_i2c_dev *dev)
+{
+	struct i2c_timings *t = &dev->timings;
+	struct device *device = dev->dev;
+
+	i2c_parse_fw_timings(device, t, false);
+
+	i2c_dw_adjust_bus_speed(dev);
+
+	if (device->of_node)
+		i2c_dw_of_configure(device);
+	if (has_acpi_companion(device))
+		i2c_dw_acpi_configure(device);
+
+	return i2c_dw_validate_speed(dev);
+}
+EXPORT_SYMBOL_GPL(i2c_dw_fw_parse_and_configure);
 
 u32 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
 {
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index b7884f15e0e9..22477143bb98 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -395,11 +395,4 @@ int i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev);
 int i2c_dw_amdpsp_probe_lock_support(struct dw_i2c_dev *dev);
 #endif
 
-int i2c_dw_validate_speed(struct dw_i2c_dev *dev);
-void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev);
-
-#if IS_ENABLED(CONFIG_ACPI)
-void i2c_dw_acpi_configure(struct device *device);
-#else
-static inline void i2c_dw_acpi_configure(struct device *device) { }
-#endif
+int i2c_dw_fw_parse_and_configure(struct dw_i2c_dev *dev);
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index cf736a8b9023..7556e9cbf8d2 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -253,7 +253,6 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	int r;
 	struct dw_pci_controller *controller;
 	struct dw_scl_sda_cfg *cfg;
-	struct i2c_timings *t;
 
 	if (id->driver_data >= ARRAY_SIZE(dw_pci_controllers))
 		return dev_err_probe(&pdev->dev, -EINVAL,
@@ -288,9 +287,6 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	dev->irq = pci_irq_vector(pdev, 0);
 	dev->flags |= controller->flags;
 
-	t = &dev->timings;
-	i2c_parse_fw_timings(&pdev->dev, t, false);
-
 	pci_set_drvdata(pdev, dev);
 
 	if (controller->setup) {
@@ -299,12 +295,7 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 			return r;
 	}
 
-	i2c_dw_adjust_bus_speed(dev);
-
-	if (has_acpi_companion(&pdev->dev))
-		i2c_dw_acpi_configure(&pdev->dev);
-
-	r = i2c_dw_validate_speed(dev);
+	r = i2c_dw_fw_parse_and_configure(dev);
 	if (r)
 		return r;
 
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index b8606b651feb..b275a1b19eec 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -21,7 +21,6 @@
 #include <linux/kernel.h>
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
-#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/pm_runtime.h>
@@ -97,43 +96,11 @@ static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
 	dev->map = devm_regmap_init(dev->dev, NULL, dev, &bt1_i2c_cfg);
 	return PTR_ERR_OR_ZERO(dev->map);
 }
-
-#define MSCC_ICPU_CFG_TWI_DELAY		0x0
-#define MSCC_ICPU_CFG_TWI_DELAY_ENABLE	BIT(0)
-#define MSCC_ICPU_CFG_TWI_SPIKE_FILTER	0x4
-
-static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev)
-{
-	writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE,
-	       dev->ext + MSCC_ICPU_CFG_TWI_DELAY);
-
-	return 0;
-}
-
-static void i2c_dw_of_configure(struct device *device)
-{
-	struct platform_device *pdev = to_platform_device(device);
-	struct dw_i2c_dev *dev = dev_get_drvdata(device);
-
-	switch (dev->flags & MODEL_MASK) {
-	case MODEL_MSCC_OCELOT:
-		dev->ext = devm_platform_ioremap_resource(pdev, 1);
-		if (!IS_ERR(dev->ext))
-			dev->set_sda_hold_time = mscc_twi_set_sda_hold_time;
-		break;
-	default:
-		break;
-	}
-}
 #else
 static int bt1_i2c_request_regs(struct dw_i2c_dev *dev)
 {
 	return -ENODEV;
 }
-
-static inline void i2c_dw_of_configure(struct device *device)
-{
-}
 #endif
 
 static int txgbe_i2c_request_regs(struct dw_i2c_dev *dev)
@@ -274,7 +241,6 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 {
 	struct i2c_adapter *adap;
 	struct dw_i2c_dev *dev;
-	struct i2c_timings *t;
 	int irq, ret;
 
 	irq = platform_get_irq(pdev, 0);
@@ -301,18 +267,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	if (ret)
 		return ret;
 
-	t = &dev->timings;
-	i2c_parse_fw_timings(&pdev->dev, t, false);
-
-	i2c_dw_adjust_bus_speed(dev);
-
-	if (pdev->dev.of_node)
-		i2c_dw_of_configure(&pdev->dev);
-
-	if (has_acpi_companion(&pdev->dev))
-		i2c_dw_acpi_configure(&pdev->dev);
-
-	ret = i2c_dw_validate_speed(dev);
+	ret = i2c_dw_fw_parse_and_configure(dev);
 	if (ret)
 		return ret;
 
@@ -336,6 +291,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 		return ret;
 
 	if (dev->clk) {
+		struct i2c_timings *t = &dev->timings;
 		u64 clk_khz;
 
 		dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz;
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 15/24] i2c: designware: Unify the firmware type checks
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (13 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 14/24] i2c: designware: Consolidate firmware parsing and configuring code Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-20 14:41 ` [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces Andy Shevchenko
                   ` (10 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Instead of asymmetrical checks for the firmware type use
the is_*_node() calls.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index d3ddfec46200..fb75e9b3d4fc 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -22,6 +22,7 @@
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/pm_runtime.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/swab.h>
 #include <linux/types.h>
@@ -372,14 +373,15 @@ int i2c_dw_fw_parse_and_configure(struct dw_i2c_dev *dev)
 {
 	struct i2c_timings *t = &dev->timings;
 	struct device *device = dev->dev;
+	struct fwnode_handle *fwnode = dev_fwnode(device);
 
 	i2c_parse_fw_timings(device, t, false);
 
 	i2c_dw_adjust_bus_speed(dev);
 
-	if (device->of_node)
+	if (is_of_node(fwnode))
 		i2c_dw_of_configure(device);
-	if (has_acpi_companion(device))
+	else if (is_acpi_node(fwnode))
 		i2c_dw_acpi_configure(device);
 
 	return i2c_dw_validate_speed(dev);
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (14 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 15/24] i2c: designware: Unify the firmware type checks Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-28 17:48   ` Andi Shyti
  2023-11-20 14:41 ` [PATCH v4 17/24] i2c: designware: Remove ->disable() callback Andy Shevchenko
                   ` (9 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Reduce scope of the I²C DesignWare driver exports to I2C_DW namespaces.
This will prevent abuse of the symbols and clean up global namespace.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c  | 2 ++
 drivers/i2c/busses/i2c-designware-master.c  | 3 +++
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 2 ++
 drivers/i2c/busses/i2c-designware-platdrv.c | 2 ++
 drivers/i2c/busses/i2c-designware-slave.c   | 3 +++
 5 files changed, 12 insertions(+)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index fb75e9b3d4fc..89b8fa492e26 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -28,6 +28,8 @@
 #include <linux/types.h>
 #include <linux/units.h>
 
+#define DEFAULT_SYMBOL_NAMESPACE	I2C_DW_COMMON
+
 #include "i2c-designware-core.h"
 
 static char *abort_sources[] = {
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index 85dbd0eb5392..0b6576d7f811 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -22,6 +22,8 @@
 #include <linux/regmap.h>
 #include <linux/reset.h>
 
+#define DEFAULT_SYMBOL_NAMESPACE	I2C_DW
+
 #include "i2c-designware-core.h"
 
 #define AMD_TIMEOUT_MIN_US	25
@@ -1079,3 +1081,4 @@ EXPORT_SYMBOL_GPL(i2c_dw_probe_master);
 
 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus master adapter");
 MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(I2C_DW_COMMON);
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 7556e9cbf8d2..a40acc3d9288 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -410,3 +410,5 @@ module_pci_driver(dw_i2c_driver);
 MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>");
 MODULE_DESCRIPTION("Synopsys DesignWare PCI I2C bus adapter");
 MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(I2C_DW);
+MODULE_IMPORT_NS(I2C_DW_COMMON);
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index b275a1b19eec..6b1a26afc278 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -471,3 +471,5 @@ module_exit(dw_i2c_exit_driver);
 MODULE_AUTHOR("Baruch Siach <baruch@tkos.co.il>");
 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter");
 MODULE_LICENSE("GPL");
+MODULE_IMPORT_NS(I2C_DW);
+MODULE_IMPORT_NS(I2C_DW_COMMON);
diff --git a/drivers/i2c/busses/i2c-designware-slave.c b/drivers/i2c/busses/i2c-designware-slave.c
index 2e079cf20bb5..70d183fa3bff 100644
--- a/drivers/i2c/busses/i2c-designware-slave.c
+++ b/drivers/i2c/busses/i2c-designware-slave.c
@@ -16,6 +16,8 @@
 #include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 
+#define DEFAULT_SYMBOL_NAMESPACE	I2C_DW
+
 #include "i2c-designware-core.h"
 
 static void i2c_dw_configure_fifo_slave(struct dw_i2c_dev *dev)
@@ -279,3 +281,4 @@ EXPORT_SYMBOL_GPL(i2c_dw_probe_slave);
 MODULE_AUTHOR("Luis Oliveira <lolivei@synopsys.com>");
 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus slave adapter");
 MODULE_LICENSE("GPL v2");
+MODULE_IMPORT_NS(I2C_DW_COMMON);
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 17/24] i2c: designware: Remove ->disable() callback
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (15 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces Andy Shevchenko
@ 2023-11-20 14:41 ` Andy Shevchenko
  2023-11-29  0:47   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 18/24] i2c: designware: Consolidate PM ops Andy Shevchenko
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:41 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Commit 90312351fd1e ("i2c: designware: MASTER mode as separated driver")
introduced ->disable() callback but there is no real use for it. Both
i2c-designware-master.c and i2c-designware-slave.c set it to the same
i2c_dw_disable() and scope is inside the same kernel module.

That said, replace the callback by explicitly calling the i2c_dw_disable().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c  | 1 +
 drivers/i2c/busses/i2c-designware-core.h    | 2 --
 drivers/i2c/busses/i2c-designware-master.c  | 1 -
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 5 +++--
 drivers/i2c/busses/i2c-designware-platdrv.c | 4 ++--
 drivers/i2c/busses/i2c-designware-slave.c   | 3 +--
 6 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 89b8fa492e26..5b1a597cb5dd 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -711,6 +711,7 @@ void i2c_dw_disable(struct dw_i2c_dev *dev)
 
 	i2c_dw_release_lock(dev);
 }
+EXPORT_SYMBOL_GPL(i2c_dw_disable);
 
 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core");
 MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index 22477143bb98..52667d670363 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -238,7 +238,6 @@ struct i2c_dw_semaphore_callbacks;
  * @semaphore_idx: Index of table with semaphore type attached to the bus. It's
  *	-1 if there is no semaphore.
  * @shared_with_punit: true if this bus is shared with the SoCs PUNIT
- * @disable: function to disable the controller
  * @init: function to initialize the I2C hardware
  * @set_sda_hold_time: callback to retrieve IP specific SDA hold timing
  * @mode: operation mode - DW_IC_MASTER or DW_IC_SLAVE
@@ -295,7 +294,6 @@ struct dw_i2c_dev {
 	void			(*release_lock)(void);
 	const struct i2c_dw_semaphore_callbacks *semaphore_cb;
 	bool			shared_with_punit;
-	void			(*disable)(struct dw_i2c_dev *dev);
 	int			(*init)(struct dw_i2c_dev *dev);
 	int			(*set_sda_hold_time)(struct dw_i2c_dev *dev);
 	int			mode;
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index 0b6576d7f811..bd3c8db521de 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -990,7 +990,6 @@ int i2c_dw_probe_master(struct dw_i2c_dev *dev)
 	init_completion(&dev->cmd_complete);
 
 	dev->init = i2c_dw_init_master;
-	dev->disable = i2c_dw_disable;
 
 	ret = i2c_dw_init_regmap(dev);
 	if (ret)
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index a40acc3d9288..20571812d150 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -198,7 +198,7 @@ static int __maybe_unused i2c_dw_pci_runtime_suspend(struct device *dev)
 {
 	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
 
-	i_dev->disable(i_dev);
+	i2c_dw_disable(i_dev);
 	return 0;
 }
 
@@ -339,7 +339,8 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev)
 {
 	struct dw_i2c_dev *dev = pci_get_drvdata(pdev);
 
-	dev->disable(dev);
+	i2c_dw_disable(dev);
+
 	pm_runtime_forbid(&pdev->dev);
 	pm_runtime_get_noresume(&pdev->dev);
 
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 6b1a26afc278..9b249d27841d 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -343,7 +343,7 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
 
 	i2c_del_adapter(&dev->adapter);
 
-	dev->disable(dev);
+	i2c_dw_disable(dev);
 
 	pm_runtime_dont_use_autosuspend(&pdev->dev);
 	pm_runtime_put_sync(&pdev->dev);
@@ -367,7 +367,7 @@ static int dw_i2c_plat_runtime_suspend(struct device *dev)
 	if (i_dev->shared_with_punit)
 		return 0;
 
-	i_dev->disable(i_dev);
+	i2c_dw_disable(i_dev);
 	i2c_dw_prepare_clk(i_dev, false);
 
 	return 0;
diff --git a/drivers/i2c/busses/i2c-designware-slave.c b/drivers/i2c/busses/i2c-designware-slave.c
index 70d183fa3bff..5abd5ec41954 100644
--- a/drivers/i2c/busses/i2c-designware-slave.c
+++ b/drivers/i2c/busses/i2c-designware-slave.c
@@ -90,7 +90,7 @@ static int i2c_dw_unreg_slave(struct i2c_client *slave)
 	struct dw_i2c_dev *dev = i2c_get_adapdata(slave->adapter);
 
 	regmap_write(dev->map, DW_IC_INTR_MASK, 0);
-	dev->disable(dev);
+	i2c_dw_disable(dev);
 	synchronize_irq(dev->irq);
 	dev->slave = NULL;
 	pm_runtime_put(dev->dev);
@@ -237,7 +237,6 @@ int i2c_dw_probe_slave(struct dw_i2c_dev *dev)
 	int ret;
 
 	dev->init = i2c_dw_init_slave;
-	dev->disable = i2c_dw_disable;
 
 	ret = i2c_dw_init_regmap(dev);
 	if (ret)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 18/24] i2c: designware: Consolidate PM ops
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (16 preceding siblings ...)
  2023-11-20 14:41 ` [PATCH v4 17/24] i2c: designware: Remove ->disable() callback Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:08   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe() Andy Shevchenko
                   ` (7 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

We have the same (*) PM ops in the PCI and plaform drivers.
Instead, consolidate that PM ops under exported variable and
deduplicate them.

*)
With the subtle ACPI and P-Unit behaviour differences in PCI case.
But this is not a problem as for ACPI we need to take care of the
P-Unit semaphore anyway and calling PM ops for ACPI makes sense as
it might provide specific operation regions in (however there are
no known devices on market that are using it with PCI enabled I2C).
Note, the clocks are not in use in the PCI case.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c  | 62 ++++++++++++++++++++
 drivers/i2c/busses/i2c-designware-core.h    |  5 +-
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 44 +-------------
 drivers/i2c/busses/i2c-designware-platdrv.c | 64 +--------------------
 4 files changed, 69 insertions(+), 106 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 5b1a597cb5dd..7c877e380605 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -21,6 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/pm.h>
 #include <linux/pm_runtime.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
@@ -713,5 +714,66 @@ void i2c_dw_disable(struct dw_i2c_dev *dev)
 }
 EXPORT_SYMBOL_GPL(i2c_dw_disable);
 
+static int i2c_dw_prepare(struct device *device)
+{
+	/*
+	 * If the ACPI companion device object is present for this device,
+	 * it may be accessed during suspend and resume of other devices via
+	 * I2C operation regions, so tell the PM core and middle layers to
+	 * avoid skipping system suspend/resume callbacks for it in that case.
+	 */
+	return !has_acpi_companion(device);
+}
+
+static int i2c_dw_runtime_suspend(struct device *device)
+{
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
+
+	if (dev->shared_with_punit)
+		return 0;
+
+	i2c_dw_disable(dev);
+	i2c_dw_prepare_clk(dev, false);
+
+	return 0;
+}
+
+static int i2c_dw_suspend(struct device *device)
+{
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
+
+	i2c_mark_adapter_suspended(&dev->adapter);
+
+	return i2c_dw_runtime_suspend(device);
+}
+
+static int i2c_dw_runtime_resume(struct device *device)
+{
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
+
+	if (!dev->shared_with_punit)
+		i2c_dw_prepare_clk(dev, true);
+
+	dev->init(dev);
+
+	return 0;
+}
+
+static int i2c_dw_resume(struct device *device)
+{
+	struct dw_i2c_dev *dev = dev_get_drvdata(device);
+
+	i2c_dw_runtime_resume(device);
+	i2c_mark_adapter_resumed(&dev->adapter);
+
+	return 0;
+}
+
+EXPORT_GPL_DEV_PM_OPS(i2c_dw_dev_pm_ops) = {
+	.prepare = pm_sleep_ptr(i2c_dw_prepare),
+	LATE_SYSTEM_SLEEP_PM_OPS(i2c_dw_suspend, i2c_dw_resume)
+	RUNTIME_PM_OPS(i2c_dw_runtime_suspend, i2c_dw_runtime_resume, NULL)
+};
+
 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core");
 MODULE_LICENSE("GPL");
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index 52667d670363..f6ebf86dcc6f 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -15,6 +15,7 @@
 #include <linux/dev_printk.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
+#include <linux/pm.h>
 #include <linux/regmap.h>
 #include <linux/types.h>
 
@@ -337,7 +338,8 @@ int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev);
 int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev);
 int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev);
 u32 i2c_dw_func(struct i2c_adapter *adap);
-void i2c_dw_disable(struct dw_i2c_dev *dev);
+
+extern const struct dev_pm_ops i2c_dw_dev_pm_ops;
 
 static inline void __i2c_dw_enable(struct dw_i2c_dev *dev)
 {
@@ -352,6 +354,7 @@ static inline void __i2c_dw_disable_nowait(struct dw_i2c_dev *dev)
 }
 
 void __i2c_dw_disable(struct dw_i2c_dev *dev);
+void i2c_dw_disable(struct dw_i2c_dev *dev);
 
 extern void i2c_dw_configure_master(struct dw_i2c_dev *dev);
 extern int i2c_dw_probe_master(struct dw_i2c_dev *dev);
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 20571812d150..df47ba04c9ee 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -19,6 +19,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/pci.h>
+#include <linux/pm.h>
 #include <linux/pm_runtime.h>
 #include <linux/power_supply.h>
 #include <linux/sched.h>
@@ -194,47 +195,6 @@ static struct dw_pci_controller dw_pci_controllers[] = {
 	},
 };
 
-static int __maybe_unused i2c_dw_pci_runtime_suspend(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	i2c_dw_disable(i_dev);
-	return 0;
-}
-
-static int __maybe_unused i2c_dw_pci_suspend(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	i2c_mark_adapter_suspended(&i_dev->adapter);
-
-	return i2c_dw_pci_runtime_suspend(dev);
-}
-
-static int __maybe_unused i2c_dw_pci_runtime_resume(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	return i_dev->init(i_dev);
-}
-
-static int __maybe_unused i2c_dw_pci_resume(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-	int ret;
-
-	ret = i2c_dw_pci_runtime_resume(dev);
-
-	i2c_mark_adapter_resumed(&i_dev->adapter);
-
-	return ret;
-}
-
-static const struct dev_pm_ops i2c_dw_pm_ops = {
-	SET_SYSTEM_SLEEP_PM_OPS(i2c_dw_pci_suspend, i2c_dw_pci_resume)
-	SET_RUNTIME_PM_OPS(i2c_dw_pci_runtime_suspend, i2c_dw_pci_runtime_resume, NULL)
-};
-
 static const struct property_entry dgpu_properties[] = {
 	/* USB-C doesn't power the system */
 	PROPERTY_ENTRY_U8("scope", POWER_SUPPLY_SCOPE_DEVICE),
@@ -402,7 +362,7 @@ static struct pci_driver dw_i2c_driver = {
 	.probe		= i2c_dw_pci_probe,
 	.remove		= i2c_dw_pci_remove,
 	.driver         = {
-		.pm     = &i2c_dw_pm_ops,
+		.pm	= pm_ptr(&i2c_dw_dev_pm_ops),
 	},
 	.id_table	= i2c_designware_pci_ids,
 };
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 9b249d27841d..d9a64006a3d6 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -29,7 +29,6 @@
 #include <linux/reset.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
-#include <linux/suspend.h>
 #include <linux/units.h>
 
 #include "i2c-designware-core.h"
@@ -349,67 +348,6 @@ static void dw_i2c_plat_remove(struct platform_device *pdev)
 	pm_runtime_put_sync(&pdev->dev);
 }
 
-static int dw_i2c_plat_prepare(struct device *dev)
-{
-	/*
-	 * If the ACPI companion device object is present for this device, it
-	 * may be accessed during suspend and resume of other devices via I2C
-	 * operation regions, so tell the PM core and middle layers to avoid
-	 * skipping system suspend/resume callbacks for it in that case.
-	 */
-	return !has_acpi_companion(dev);
-}
-
-static int dw_i2c_plat_runtime_suspend(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	if (i_dev->shared_with_punit)
-		return 0;
-
-	i2c_dw_disable(i_dev);
-	i2c_dw_prepare_clk(i_dev, false);
-
-	return 0;
-}
-
-static int dw_i2c_plat_suspend(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	i2c_mark_adapter_suspended(&i_dev->adapter);
-
-	return dw_i2c_plat_runtime_suspend(dev);
-}
-
-static int dw_i2c_plat_runtime_resume(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	if (!i_dev->shared_with_punit)
-		i2c_dw_prepare_clk(i_dev, true);
-
-	i_dev->init(i_dev);
-
-	return 0;
-}
-
-static int dw_i2c_plat_resume(struct device *dev)
-{
-	struct dw_i2c_dev *i_dev = dev_get_drvdata(dev);
-
-	dw_i2c_plat_runtime_resume(dev);
-	i2c_mark_adapter_resumed(&i_dev->adapter);
-
-	return 0;
-}
-
-static const struct dev_pm_ops dw_i2c_dev_pm_ops = {
-	.prepare = pm_sleep_ptr(dw_i2c_plat_prepare),
-	LATE_SYSTEM_SLEEP_PM_OPS(dw_i2c_plat_suspend, dw_i2c_plat_resume)
-	RUNTIME_PM_OPS(dw_i2c_plat_runtime_suspend, dw_i2c_plat_runtime_resume, NULL)
-};
-
 static const struct of_device_id dw_i2c_of_match[] = {
 	{ .compatible = "snps,designware-i2c", },
 	{ .compatible = "mscc,ocelot-i2c", .data = (void *)MODEL_MSCC_OCELOT },
@@ -451,7 +389,7 @@ static struct platform_driver dw_i2c_driver = {
 		.name	= "i2c_designware",
 		.of_match_table = dw_i2c_of_match,
 		.acpi_match_table = dw_i2c_acpi_match,
-		.pm	= pm_ptr(&dw_i2c_dev_pm_ops),
+		.pm	= pm_ptr(&i2c_dw_dev_pm_ops),
 	},
 	.id_table = dw_i2c_platform_ids,
 };
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (17 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 18/24] i2c: designware: Consolidate PM ops Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:21   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 20/24] i2c: designware: Propagate firmware node Andy Shevchenko
                   ` (6 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Since i2c_dw_probe() is going to be extended, uninline it to reduce
the noise in the common header.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c | 14 ++++++++++++++
 drivers/i2c/busses/i2c-designware-core.h   | 17 ++---------------
 2 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 7c877e380605..1d213bc0bbfa 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -714,6 +714,20 @@ void i2c_dw_disable(struct dw_i2c_dev *dev)
 }
 EXPORT_SYMBOL_GPL(i2c_dw_disable);
 
+int i2c_dw_probe(struct dw_i2c_dev *dev)
+{
+	switch (dev->mode) {
+	case DW_IC_SLAVE:
+		return i2c_dw_probe_slave(dev);
+	case DW_IC_MASTER:
+		return i2c_dw_probe_master(dev);
+	default:
+		dev_err(dev->dev, "Wrong operation mode: %d\n", dev->mode);
+		return -EINVAL;
+	}
+}
+EXPORT_SYMBOL_GPL(i2c_dw_probe);
+
 static int i2c_dw_prepare(struct device *device)
 {
 	/*
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index f6ebf86dcc6f..7479cb3a450d 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -10,9 +10,7 @@
  */
 
 #include <linux/bits.h>
-#include <linux/compiler_types.h>
 #include <linux/completion.h>
-#include <linux/dev_printk.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/pm.h>
@@ -367,19 +365,6 @@ static inline void i2c_dw_configure_slave(struct dw_i2c_dev *dev) { }
 static inline int i2c_dw_probe_slave(struct dw_i2c_dev *dev) { return -EINVAL; }
 #endif
 
-static inline int i2c_dw_probe(struct dw_i2c_dev *dev)
-{
-	switch (dev->mode) {
-	case DW_IC_SLAVE:
-		return i2c_dw_probe_slave(dev);
-	case DW_IC_MASTER:
-		return i2c_dw_probe_master(dev);
-	default:
-		dev_err(dev->dev, "Wrong operation mode: %d\n", dev->mode);
-		return -EINVAL;
-	}
-}
-
 static inline void i2c_dw_configure(struct dw_i2c_dev *dev)
 {
 	if (i2c_detect_slave_mode(dev->dev))
@@ -388,6 +373,8 @@ static inline void i2c_dw_configure(struct dw_i2c_dev *dev)
 		i2c_dw_configure_master(dev);
 }
 
+int i2c_dw_probe(struct dw_i2c_dev *dev);
+
 #if IS_ENABLED(CONFIG_I2C_DESIGNWARE_BAYTRAIL)
 int i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev);
 #endif
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 20/24] i2c: designware: Propagate firmware node
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (18 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe() Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:09   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata() Andy Shevchenko
                   ` (5 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Propagate firmware node by using a specific API call, i.e. device_set_node().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c  | 2 ++
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 2 --
 drivers/i2c/busses/i2c-designware-platdrv.c | 3 ---
 3 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 1d213bc0bbfa..45ced3354eef 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -716,6 +716,8 @@ EXPORT_SYMBOL_GPL(i2c_dw_disable);
 
 int i2c_dw_probe(struct dw_i2c_dev *dev)
 {
+	device_set_node(&dev->adapter.dev, dev_fwnode(dev->dev));
+
 	switch (dev->mode) {
 	case DW_IC_SLAVE:
 		return i2c_dw_probe_slave(dev);
diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index df47ba04c9ee..2c7bc7dc8e44 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -9,7 +9,6 @@
  * Copyright (C) 2009 Provigent Ltd.
  * Copyright (C) 2011, 2015, 2016 Intel Corporation.
  */
-#include <linux/acpi.h>
 #include <linux/delay.h>
 #include <linux/err.h>
 #include <linux/errno.h>
@@ -273,7 +272,6 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	adap = &dev->adapter;
 	adap->owner = THIS_MODULE;
 	adap->class = 0;
-	ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev));
 	adap->nr = controller->bus_num;
 
 	r = i2c_dw_probe(dev);
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index d9a64006a3d6..1b76f721bf81 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -8,7 +8,6 @@
  * Copyright (C) 2007 MontaVista Software Inc.
  * Copyright (C) 2009 Provigent Ltd.
  */
-#include <linux/acpi.h>
 #include <linux/clk-provider.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
@@ -305,8 +304,6 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	adap->owner = THIS_MODULE;
 	adap->class = dmi_check_system(dw_i2c_hwmon_class_dmi) ?
 					I2C_CLASS_HWMON : I2C_CLASS_DEPRECATED;
-	ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev));
-	adap->dev.of_node = pdev->dev.of_node;
 	adap->nr = -1;
 
 	if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata()
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (19 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 20/24] i2c: designware: Propagate firmware node Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:10   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device Andy Shevchenko
                   ` (4 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Use the wrapper function for getting the driver data using pci_dev
instead of using dev_get_drvdata() with &pdev->dev, so we can directly
pass a struct pci_dev. This is a purely cosmetic change.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 2c7bc7dc8e44..211d8279b05e 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -102,7 +102,7 @@ static u32 mfld_get_clk_rate_khz(struct dw_i2c_dev *dev)
 
 static int mfld_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
 {
-	struct dw_i2c_dev *dev = dev_get_drvdata(&pdev->dev);
+	struct dw_i2c_dev *dev = pci_get_drvdata(pdev);
 
 	switch (pdev->device) {
 	case 0x0817:
@@ -152,7 +152,7 @@ static u32 navi_amd_get_clk_rate_khz(struct dw_i2c_dev *dev)
 
 static int navi_amd_setup(struct pci_dev *pdev, struct dw_pci_controller *c)
 {
-	struct dw_i2c_dev *dev = dev_get_drvdata(&pdev->dev);
+	struct dw_i2c_dev *dev = pci_get_drvdata(pdev);
 
 	dev->flags |= MODEL_AMD_NAVI_GPU;
 	dev->timings.bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (20 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata() Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:12   ` Andi Shyti
  2023-11-20 14:42 ` [PATCH v4 23/24] i2c: designware: Get rid of redundant 'else' Andy Shevchenko
                   ` (3 subsequent siblings)
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Use temporary variable for struct device to make code neater.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-pcidrv.c  | 24 +++++++-------
 drivers/i2c/busses/i2c-designware-platdrv.c | 35 ++++++++++-----------
 2 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
index 211d8279b05e..1408fd22d398 100644
--- a/drivers/i2c/busses/i2c-designware-pcidrv.c
+++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
@@ -207,6 +207,7 @@ static const struct software_node dgpu_node = {
 static int i2c_dw_pci_probe(struct pci_dev *pdev,
 			    const struct pci_device_id *id)
 {
+	struct device *device = &pdev->dev;
 	struct dw_i2c_dev *dev;
 	struct i2c_adapter *adap;
 	int r;
@@ -214,25 +215,22 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	struct dw_scl_sda_cfg *cfg;
 
 	if (id->driver_data >= ARRAY_SIZE(dw_pci_controllers))
-		return dev_err_probe(&pdev->dev, -EINVAL,
-				     "Invalid driver data %ld\n",
+		return dev_err_probe(device, -EINVAL, "Invalid driver data %ld\n",
 				     id->driver_data);
 
 	controller = &dw_pci_controllers[id->driver_data];
 
 	r = pcim_enable_device(pdev);
 	if (r)
-		return dev_err_probe(&pdev->dev, r,
-				     "Failed to enable I2C PCI device\n");
+		return dev_err_probe(device, r, "Failed to enable I2C PCI device\n");
 
 	pci_set_master(pdev);
 
 	r = pcim_iomap_regions(pdev, 1 << 0, pci_name(pdev));
 	if (r)
-		return dev_err_probe(&pdev->dev, r,
-				     "I/O memory remapping failed\n");
+		return dev_err_probe(device, r, "I/O memory remapping failed\n");
 
-	dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
+	dev = devm_kzalloc(device, sizeof(*dev), GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 
@@ -242,7 +240,7 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 
 	dev->get_clk_rate_khz = controller->get_clk_rate_khz;
 	dev->base = pcim_iomap_table(pdev)[0];
-	dev->dev = &pdev->dev;
+	dev->dev = device;
 	dev->irq = pci_irq_vector(pdev, 0);
 	dev->flags |= controller->flags;
 
@@ -281,14 +279,14 @@ static int i2c_dw_pci_probe(struct pci_dev *pdev,
 	if ((dev->flags & MODEL_MASK) == MODEL_AMD_NAVI_GPU) {
 		dev->slave = i2c_new_ccgx_ucsi(&dev->adapter, dev->irq, &dgpu_node);
 		if (IS_ERR(dev->slave))
-			return dev_err_probe(dev->dev, PTR_ERR(dev->slave),
+			return dev_err_probe(device, PTR_ERR(dev->slave),
 					     "register UCSI failed\n");
 	}
 
-	pm_runtime_set_autosuspend_delay(&pdev->dev, 1000);
-	pm_runtime_use_autosuspend(&pdev->dev);
-	pm_runtime_put_autosuspend(&pdev->dev);
-	pm_runtime_allow(&pdev->dev);
+	pm_runtime_set_autosuspend_delay(device, 1000);
+	pm_runtime_use_autosuspend(device);
+	pm_runtime_put_autosuspend(device);
+	pm_runtime_allow(device);
 
 	return 0;
 }
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 1b76f721bf81..02dc1d1001f2 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -237,6 +237,7 @@ static int dw_i2c_plat_get_reset(struct dw_i2c_dev *dev)
 
 static int dw_i2c_plat_probe(struct platform_device *pdev)
 {
+	struct device *device = &pdev->dev;
 	struct i2c_adapter *adap;
 	struct dw_i2c_dev *dev;
 	int irq, ret;
@@ -245,15 +246,15 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	if (irq < 0)
 		return irq;
 
-	dev = devm_kzalloc(&pdev->dev, sizeof(struct dw_i2c_dev), GFP_KERNEL);
+	dev = devm_kzalloc(device, sizeof(*dev), GFP_KERNEL);
 	if (!dev)
 		return -ENOMEM;
 
-	dev->flags = (uintptr_t)device_get_match_data(&pdev->dev);
-	if (device_property_present(&pdev->dev, "wx,i2c-snps-model"))
+	dev->flags = (uintptr_t)device_get_match_data(device);
+	if (device_property_present(device, "wx,i2c-snps-model"))
 		dev->flags = MODEL_WANGXUN_SP;
 
-	dev->dev = &pdev->dev;
+	dev->dev = device;
 	dev->irq = irq;
 	platform_set_drvdata(pdev, dev);
 
@@ -276,11 +277,11 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	i2c_dw_configure(dev);
 
 	/* Optional interface clock */
-	dev->pclk = devm_clk_get_optional(&pdev->dev, "pclk");
+	dev->pclk = devm_clk_get_optional(device, "pclk");
 	if (IS_ERR(dev->pclk))
 		return PTR_ERR(dev->pclk);
 
-	dev->clk = devm_clk_get_optional(&pdev->dev, NULL);
+	dev->clk = devm_clk_get_optional(device, NULL);
 	if (IS_ERR(dev->clk))
 		return PTR_ERR(dev->clk);
 
@@ -306,23 +307,19 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 					I2C_CLASS_HWMON : I2C_CLASS_DEPRECATED;
 	adap->nr = -1;
 
-	if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
-		dev_pm_set_driver_flags(&pdev->dev,
-					DPM_FLAG_SMART_PREPARE);
-	} else {
-		dev_pm_set_driver_flags(&pdev->dev,
-					DPM_FLAG_SMART_PREPARE |
-					DPM_FLAG_SMART_SUSPEND);
-	}
+	if (dev->flags & ACCESS_NO_IRQ_SUSPEND)
+		dev_pm_set_driver_flags(device, DPM_FLAG_SMART_PREPARE);
+	else
+		dev_pm_set_driver_flags(device, DPM_FLAG_SMART_PREPARE | DPM_FLAG_SMART_SUSPEND);
 
-	device_enable_async_suspend(&pdev->dev);
+	device_enable_async_suspend(device);
 
 	/* The code below assumes runtime PM to be disabled. */
-	WARN_ON(pm_runtime_enabled(&pdev->dev));
+	WARN_ON(pm_runtime_enabled(device));
 
-	pm_runtime_set_autosuspend_delay(&pdev->dev, 1000);
-	pm_runtime_use_autosuspend(&pdev->dev);
-	pm_runtime_set_active(&pdev->dev);
+	pm_runtime_set_autosuspend_delay(device, 1000);
+	pm_runtime_use_autosuspend(device);
+	pm_runtime_set_active(device);
 
 	ret = dw_i2c_plat_pm_setup(dev);
 	if (ret)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 23/24] i2c: designware: Get rid of redundant 'else'
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (21 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-20 14:42 ` [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments Andy Shevchenko
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

In the snippets like the following

	if (...)
		return / goto / break / continue ...;
	else
		...

the 'else' is redundant. Get rid of it.

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-common.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index 45ced3354eef..b8e5d56473d6 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -639,10 +639,10 @@ int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev)
 
 	if (abort_source & DW_IC_TX_ARB_LOST)
 		return -EAGAIN;
-	else if (abort_source & DW_IC_TX_ABRT_GCALL_READ)
+	if (abort_source & DW_IC_TX_ABRT_GCALL_READ)
 		return -EINVAL; /* wrong msgs[] data */
-	else
-		return -EIO;
+
+	return -EIO;
 }
 
 int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev)
-- 
2.43.0.rc1.1.gbec44491f096


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

* [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (22 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 23/24] i2c: designware: Get rid of redundant 'else' Andy Shevchenko
@ 2023-11-20 14:42 ` Andy Shevchenko
  2023-11-29 23:20   ` Andi Shyti
  2023-11-21 14:30 ` [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Jarkko Nikula
  2023-11-21 16:08 ` Serge Semin
  25 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-20 14:42 UTC (permalink / raw)
  To: Mario Limonciello, Jarkko Nikula, Herbert Xu, Andy Shevchenko,
	Wolfram Sang, linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

Fix spelling and other issues, such as kernel-doc reported about,
in the comments. While at it, fix some indentation issues as well.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/i2c/busses/i2c-designware-amdpsp.c  | 10 +++++-----
 drivers/i2c/busses/i2c-designware-common.c  |  8 +++++---
 drivers/i2c/busses/i2c-designware-core.h    | 10 +++++-----
 drivers/i2c/busses/i2c-designware-master.c  | 15 +++++++++------
 drivers/i2c/busses/i2c-designware-platdrv.c |  4 ++--
 drivers/i2c/busses/i2c-designware-slave.c   |  6 ++++--
 6 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/drivers/i2c/busses/i2c-designware-amdpsp.c b/drivers/i2c/busses/i2c-designware-amdpsp.c
index 63454b06e5da..8fbd2a10c31a 100644
--- a/drivers/i2c/busses/i2c-designware-amdpsp.c
+++ b/drivers/i2c/busses/i2c-designware-amdpsp.c
@@ -155,7 +155,7 @@ static void psp_release_i2c_bus_deferred(struct work_struct *work)
 
 	/*
 	 * If there is any pending transaction, cannot release the bus here.
-	 * psp_release_i2c_bus will take care of this later.
+	 * psp_release_i2c_bus() will take care of this later.
 	 */
 	if (psp_i2c_access_count)
 		goto cleanup;
@@ -210,12 +210,12 @@ static void psp_release_i2c_bus(void)
 {
 	mutex_lock(&psp_i2c_access_mutex);
 
-	/* Return early if mailbox was malfunctional */
+	/* Return early if mailbox was malfunctioned */
 	if (psp_i2c_mbox_fail)
 		goto cleanup;
 
 	/*
-	 * If we are last owner of PSP semaphore, need to release aribtration
+	 * If we are last owner of PSP semaphore, need to release arbitration
 	 * via mailbox.
 	 */
 	psp_i2c_access_count--;
@@ -235,9 +235,9 @@ static void psp_release_i2c_bus(void)
 
 /*
  * Locking methods are based on the default implementation from
- * drivers/i2c/i2c-core-base.c, but with psp acquire and release operations
+ * drivers/i2c/i2c-core-base.c, but with PSP acquire and release operations
  * added. With this in place we can ensure that i2c clients on the bus shared
- * with psp are able to lock HW access to the bus for arbitrary number of
+ * with PSP are able to lock HW access to the bus for arbitrary number of
  * operations - that is e.g. write-wait-read.
  */
 static void i2c_adapter_dw_psp_lock_bus(struct i2c_adapter *adapter,
diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index b8e5d56473d6..bef53a746b8d 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -127,6 +127,8 @@ static int dw_reg_write_word(void *context, unsigned int reg, unsigned int val)
  * Autodetects needed register access mode and creates the regmap with
  * corresponding read/write callbacks. This must be called before doing any
  * other register access.
+ *
+ * Return: 0 on success, or negative errno otherwise.
  */
 int i2c_dw_init_regmap(struct dw_i2c_dev *dev)
 {
@@ -174,7 +176,7 @@ int i2c_dw_init_regmap(struct dw_i2c_dev *dev)
 	/*
 	 * Note we'll check the return value of the regmap IO accessors only
 	 * at the probe stage. The rest of the code won't do this because
-	 * basically we have MMIO-based regmap so non of the read/write methods
+	 * basically we have MMIO-based regmap, so none of the read/write methods
 	 * can fail.
 	 */
 	dev->map = devm_regmap_init(dev->dev, NULL, dev, &map_cfg);
@@ -336,7 +338,7 @@ static u32 i2c_dw_acpi_round_bus_speed(struct device *device)
 
 	acpi_speed = i2c_acpi_find_bus_speed(device);
 	/*
-	 * Some DSTDs use a non standard speed, round down to the lowest
+	 * Some DSDTs use a non standard speed, round down to the lowest
 	 * standard speed.
 	 */
 	for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
@@ -532,7 +534,7 @@ void __i2c_dw_disable(struct dw_i2c_dev *dev)
 
 		/*
 		 * Wait 10 times the signaling period of the highest I2C
-		 * transfer supported by the driver (for 400KHz this is
+		 * transfer supported by the driver (for 400kHz this is
 		 * 25us) as described in the DesignWare I2C databook.
 		 */
 		usleep_range(25, 250);
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index 7479cb3a450d..5405d4da2b7d 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -141,10 +141,10 @@
 #define DW_IC_SLAVE				1
 
 /*
- * Hardware abort codes from the DW_IC_TX_ABRT_SOURCE register
+ * Hardware abort codes from the DW_IC_TX_ABRT_SOURCE register.
  *
- * Only expected abort codes are listed here
- * refer to the datasheet for the full list
+ * Only expected abort codes are listed here,
+ * refer to the datasheet for the full list.
  */
 #define ABRT_7B_ADDR_NOACK			0
 #define ABRT_10ADDR1_NOACK			1
@@ -201,7 +201,7 @@ struct i2c_dw_semaphore_callbacks;
  * @rst: optional reset for the controller
  * @slave: represent an I2C slave device
  * @get_clk_rate_khz: callback to retrieve IP specific bus speed
- * @cmd_err: run time hadware error code
+ * @cmd_err: run time hardware error code
  * @msgs: points to an array of messages currently being transferred
  * @msgs_num: the number of elements in msgs
  * @msg_write_idx: the element index of the current tx message in the msgs array
@@ -236,7 +236,7 @@ struct i2c_dw_semaphore_callbacks;
  * @release_lock: function to release a hardware lock on the bus
  * @semaphore_idx: Index of table with semaphore type attached to the bus. It's
  *	-1 if there is no semaphore.
- * @shared_with_punit: true if this bus is shared with the SoCs PUNIT
+ * @shared_with_punit: true if this bus is shared with the SoC's PUNIT
  * @init: function to initialize the I2C hardware
  * @set_sda_hold_time: callback to retrieve IP specific SDA hold timing
  * @mode: operation mode - DW_IC_MASTER or DW_IC_SLAVE
diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c
index bd3c8db521de..4ef4160db01f 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -168,12 +168,14 @@ static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
 }
 
 /**
- * i2c_dw_init_master() - Initialize the designware I2C master hardware
+ * i2c_dw_init_master() - Initialize the DesignWare I2C master hardware
  * @dev: device private data
  *
  * This functions configures and enables the I2C master.
  * This function is called during I2C init function, and in case of timeout at
  * run time.
+ *
+ * Return: 0 on success, or negative errno otherwise.
  */
 static int i2c_dw_init_master(struct dw_i2c_dev *dev)
 {
@@ -314,7 +316,7 @@ static int amd_i2c_dw_xfer_quirk(struct i2c_adapter *adap, struct i2c_msg *msgs,
 		/*
 		 * Initiate the i2c read/write transaction of buffer length,
 		 * and poll for bus busy status. For the last message transfer,
-		 * update the command with stopbit enable.
+		 * update the command with stop bit enable.
 		 */
 		for (msg_itr_lmt = buf_len; msg_itr_lmt > 0; msg_itr_lmt--) {
 			if (msg_wrt_idx == num_msgs - 1 && msg_itr_lmt == 1)
@@ -421,7 +423,7 @@ static int txgbe_i2c_dw_xfer_quirk(struct i2c_adapter *adap, struct i2c_msg *msg
 
 /*
  * Initiate (and continue) low level master read/write transaction.
- * This function is only called from i2c_dw_isr, and pumping i2c_msg
+ * This function is only called from i2c_dw_isr(), and pumping i2c_msg
  * messages into the tx buffer.  Even if the size of i2c_msg data is
  * longer than the size of the tx buffer, it handles everything.
  */
@@ -459,7 +461,8 @@ i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
 			buf = msgs[dev->msg_write_idx].buf;
 			buf_len = msgs[dev->msg_write_idx].len;
 
-			/* If both IC_EMPTYFIFO_HOLD_MASTER_EN and
+			/*
+			 * If both IC_EMPTYFIFO_HOLD_MASTER_EN and
 			 * IC_RESTART_EN are set, we must manually
 			 * set restart bit between messages.
 			 */
@@ -949,7 +952,7 @@ static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev)
 	rinfo->unprepare_recovery = i2c_dw_unprepare_recovery;
 	adap->bus_recovery_info = rinfo;
 
-	dev_info(dev->dev, "running with gpio recovery mode! scl%s",
+	dev_info(dev->dev, "running with GPIO recovery mode! scl%s",
 		 rinfo->sda_gpiod ? ",sda" : "");
 
 	return 0;
@@ -1053,7 +1056,7 @@ int i2c_dw_probe_master(struct dw_i2c_dev *dev)
 	ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, irq_flags,
 			       dev_name(dev->dev), dev);
 	if (ret) {
-		dev_err(dev->dev, "failure requesting irq %i: %d\n",
+		dev_err(dev->dev, "failure requesting IRQ %i: %d\n",
 			dev->irq, ret);
 		return ret;
 	}
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 02dc1d1001f2..fa9c0c56b11e 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -72,7 +72,7 @@ static int bt1_i2c_write(void *context, unsigned int reg, unsigned int val)
 		return ret;
 
 	return regmap_write(dev->sysmap, BT1_I2C_CTL,
-		BT1_I2C_CTL_GO | BT1_I2C_CTL_WR | (reg & BT1_I2C_CTL_ADDR_MASK));
+			    BT1_I2C_CTL_GO | BT1_I2C_CTL_WR | (reg & BT1_I2C_CTL_ADDR_MASK));
 }
 
 static struct regmap_config bt1_i2c_cfg = {
@@ -304,7 +304,7 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
 	adap = &dev->adapter;
 	adap->owner = THIS_MODULE;
 	adap->class = dmi_check_system(dw_i2c_hwmon_class_dmi) ?
-					I2C_CLASS_HWMON : I2C_CLASS_DEPRECATED;
+				       I2C_CLASS_HWMON : I2C_CLASS_DEPRECATED;
 	adap->nr = -1;
 
 	if (dev->flags & ACCESS_NO_IRQ_SUSPEND)
diff --git a/drivers/i2c/busses/i2c-designware-slave.c b/drivers/i2c/busses/i2c-designware-slave.c
index 5abd5ec41954..21d80fe81cfe 100644
--- a/drivers/i2c/busses/i2c-designware-slave.c
+++ b/drivers/i2c/busses/i2c-designware-slave.c
@@ -32,12 +32,14 @@ static void i2c_dw_configure_fifo_slave(struct dw_i2c_dev *dev)
 }
 
 /**
- * i2c_dw_init_slave() - Initialize the designware i2c slave hardware
+ * i2c_dw_init_slave() - Initialize the DesignWare i2c slave hardware
  * @dev: device private data
  *
  * This function configures and enables the I2C in slave mode.
  * This function is called during I2C init function, and in case of timeout at
  * run time.
+ *
+ * Return: 0 on success, or negative errno otherwise.
  */
 static int i2c_dw_init_slave(struct dw_i2c_dev *dev)
 {
@@ -264,7 +266,7 @@ int i2c_dw_probe_slave(struct dw_i2c_dev *dev)
 	ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr_slave,
 			       IRQF_SHARED, dev_name(dev->dev), dev);
 	if (ret) {
-		dev_err(dev->dev, "failure requesting irq %i: %d\n",
+		dev_err(dev->dev, "failure requesting IRQ %i: %d\n",
 			dev->irq, ret);
 		return ret;
 	}
-- 
2.43.0.rc1.1.gbec44491f096


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

* Re: [PATCH v4 00/24] i2c: designware: code consolidation & cleanups
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (23 preceding siblings ...)
  2023-11-20 14:42 ` [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments Andy Shevchenko
@ 2023-11-21 14:30 ` Jarkko Nikula
  2023-11-21 16:08 ` Serge Semin
  25 siblings, 0 replies; 45+ messages in thread
From: Jarkko Nikula @ 2023-11-21 14:30 UTC (permalink / raw)
  To: Andy Shevchenko, Mario Limonciello, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel
  Cc: Mika Westerberg, Jan Dabros, Andi Shyti, Philipp Zabel

On 11/20/23 16:41, Andy Shevchenko wrote:
> The series now consists the following groups of patches:
> - fixing cleanup order in error path and remove (patches 1-4)
> - refactoring i2c_dw_*_lock_support() (patches 5-6)
> - refactoring module alias and device ID tables (patches 7-10)
> - unifying firmware parsing and configuring code (patches 11-15)
> - miscellaneous cleanups (patches 16-17,21-24)
> - consolidating PM ops (patch 18)
> - using device_set_node() for all drivers (patches 19-20)
> 
> The "Consolidate PM ops" might be considered as rft, however I don't think
> we have any hardware where the behaviour will be changed, anyways, good
> to test.
> 
> Changelog v4:
> - dropped first patch as controversial (Jarkko)
> - dropped Fixes tag from a few patches (Jarkko)
> - moved a hunk in patch 1 to patch 2 where it belongs (Jarkko)
> - exported i2c_dw_disable() for modular building (Jarkko)
> - added tags (Mario, Jarkko)
> 
> v3: https://lore.kernel.org/r/20231110182304.3894319-1-andriy.shevchenko@linux.intel.com
> 
> Changelog v3:
> - doubled the size of the series
> - fixed compilation error (LKP)
> - added tags (Andi)
> 
> v2: https://lore.kernel.org/r/20231109182823.3531846-1-andriy.shevchenko@linux.intel.com
> 
> Changelog v2:
> - reworked the series to make it less twisted (Jarkko, Andi)
> - added tags to the patches that have been rebased (Andi, Mario, Jarkko)
> - introduced a few new changes (PM ops, export namespace)
> 
> v1: https://lore.kernel.org/r/20230725143023.86325-1-andriy.shevchenko@linux.intel.com
> 
> Andy Shevchenko (24):
>    i2c: designware: Fix PM calls order in dw_i2c_plat_probe()
>    i2c: designware: Fix reset call order in dw_i2c_plat_probe()
>    i2c: designware: Let PCI core to take care about interrupt vectors
>    i2c: designware: Fix lock probe call order in dw_i2c_plat_probe()
>    i2c: designware: Replace a while-loop by for-loop
>    i2c: designware: Save pointer to semaphore callbacks instead of index
>    i2c: designware: Add missing 'c' into PCI IDs variable name
>    i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE()
>    i2c: designware: Unify terminator in device ID tables
>    i2c: designware: Always provide device ID tables
>    i2c: designware: Drop return value from i2c_dw_acpi_configure()
>    i2c: designware: Drop return value from dw_i2c_of_configure()
>    i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure()
>    i2c: designware: Consolidate firmware parsing and configuring code
>    i2c: designware: Unify the firmware type checks
>    i2c: designware: Move exports to I2C_DW namespaces
>    i2c: designware: Remove ->disable() callback
>    i2c: designware: Consolidate PM ops
>    i2c: designware: Uninline i2c_dw_probe()
>    i2c: designware: Propagate firmware node
>    i2c: designware: Use pci_get_drvdata()
>    i2c: designware: Use temporary variable for struct device
>    i2c: designware: Get rid of redundant 'else'
>    i2c: designware: Fix spelling and other issues in the comments
> 
>   drivers/i2c/busses/i2c-designware-amdpsp.c  |  10 +-
>   drivers/i2c/busses/i2c-designware-common.c  | 167 +++++++++-
>   drivers/i2c/busses/i2c-designware-core.h    |  47 +--
>   drivers/i2c/busses/i2c-designware-master.c  |  19 +-
>   drivers/i2c/busses/i2c-designware-pcidrv.c  | 114 ++-----
>   drivers/i2c/busses/i2c-designware-platdrv.c | 337 +++++++-------------
>   drivers/i2c/busses/i2c-designware-slave.c   |  12 +-
>   7 files changed, 337 insertions(+), 369 deletions(-)
> 
To all (some I've ack'ed already):

Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>

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

* Re: [PATCH v4 00/24] i2c: designware: code consolidation & cleanups
  2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
                   ` (24 preceding siblings ...)
  2023-11-21 14:30 ` [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Jarkko Nikula
@ 2023-11-21 16:08 ` Serge Semin
  25 siblings, 0 replies; 45+ messages in thread
From: Serge Semin @ 2023-11-21 16:08 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros, Andi Shyti,
	Philipp Zabel

On Mon, Nov 20, 2023 at 04:41:42PM +0200, Andy Shevchenko wrote:
> The series now consists the following groups of patches:
> - fixing cleanup order in error path and remove (patches 1-4)
> - refactoring i2c_dw_*_lock_support() (patches 5-6)
> - refactoring module alias and device ID tables (patches 7-10)
> - unifying firmware parsing and configuring code (patches 11-15)
> - miscellaneous cleanups (patches 16-17,21-24)
> - consolidating PM ops (patch 18)
> - using device_set_node() for all drivers (patches 19-20)
> 
> The "Consolidate PM ops" might be considered as rft, however I don't think
> we have any hardware where the behaviour will be changed, anyways, good
> to test.
> 
> Changelog v4:
> - dropped first patch as controversial (Jarkko)
> - dropped Fixes tag from a few patches (Jarkko)
> - moved a hunk in patch 1 to patch 2 where it belongs (Jarkko)
> - exported i2c_dw_disable() for modular building (Jarkko)
> - added tags (Mario, Jarkko)

It looks like the series review is almost over. I've got it tested on
DW APB I2C v1.21a on a platform with the directly and indirectly
accessible registers. No problem spotted. Thanks!

Tested-by: Serge Semin <fancer.lancer@gmail.com>

-Serge(y)

> 
> v3: https://lore.kernel.org/r/20231110182304.3894319-1-andriy.shevchenko@linux.intel.com
> 
> Changelog v3:
> - doubled the size of the series
> - fixed compilation error (LKP)
> - added tags (Andi)
> 
> v2: https://lore.kernel.org/r/20231109182823.3531846-1-andriy.shevchenko@linux.intel.com
> 
> Changelog v2:
> - reworked the series to make it less twisted (Jarkko, Andi)
> - added tags to the patches that have been rebased (Andi, Mario, Jarkko)
> - introduced a few new changes (PM ops, export namespace)
> 
> v1: https://lore.kernel.org/r/20230725143023.86325-1-andriy.shevchenko@linux.intel.com
> 
> Andy Shevchenko (24):
>   i2c: designware: Fix PM calls order in dw_i2c_plat_probe()
>   i2c: designware: Fix reset call order in dw_i2c_plat_probe()
>   i2c: designware: Let PCI core to take care about interrupt vectors
>   i2c: designware: Fix lock probe call order in dw_i2c_plat_probe()
>   i2c: designware: Replace a while-loop by for-loop
>   i2c: designware: Save pointer to semaphore callbacks instead of index
>   i2c: designware: Add missing 'c' into PCI IDs variable name
>   i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE()
>   i2c: designware: Unify terminator in device ID tables
>   i2c: designware: Always provide device ID tables
>   i2c: designware: Drop return value from i2c_dw_acpi_configure()
>   i2c: designware: Drop return value from dw_i2c_of_configure()
>   i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure()
>   i2c: designware: Consolidate firmware parsing and configuring code
>   i2c: designware: Unify the firmware type checks
>   i2c: designware: Move exports to I2C_DW namespaces
>   i2c: designware: Remove ->disable() callback
>   i2c: designware: Consolidate PM ops
>   i2c: designware: Uninline i2c_dw_probe()
>   i2c: designware: Propagate firmware node
>   i2c: designware: Use pci_get_drvdata()
>   i2c: designware: Use temporary variable for struct device
>   i2c: designware: Get rid of redundant 'else'
>   i2c: designware: Fix spelling and other issues in the comments
> 
>  drivers/i2c/busses/i2c-designware-amdpsp.c  |  10 +-
>  drivers/i2c/busses/i2c-designware-common.c  | 167 +++++++++-
>  drivers/i2c/busses/i2c-designware-core.h    |  47 +--
>  drivers/i2c/busses/i2c-designware-master.c  |  19 +-
>  drivers/i2c/busses/i2c-designware-pcidrv.c  | 114 ++-----
>  drivers/i2c/busses/i2c-designware-platdrv.c | 337 +++++++-------------
>  drivers/i2c/busses/i2c-designware-slave.c   |  12 +-
>  7 files changed, 337 insertions(+), 369 deletions(-)
> 
> -- 
> 2.43.0.rc1.1.gbec44491f096
> 
> 

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

* Re: [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe()
  2023-11-20 14:41 ` [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe() Andy Shevchenko
@ 2023-11-26 21:48   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 21:48 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:43PM +0200, Andy Shevchenko wrote:
> We should not mix managed calls with non-managed. This will break
> the calls order at the error path and ->remove() stages. Fix this
> by wrapping PM ops to become managed one.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 02/24] i2c: designware: Fix reset call order in dw_i2c_plat_probe()
  2023-11-20 14:41 ` [PATCH v4 02/24] i2c: designware: Fix reset call " Andy Shevchenko
@ 2023-11-26 21:57   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 21:57 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:44PM +0200, Andy Shevchenko wrote:
> We should not mix managed calls with non-managed. This will break
> the calls order at the error path and ->remove() stages. Fix this
> by wrapping reset control to become managed one.
> 
> With that start checking the rerurn code from reset_control_deassert()
> as it may fail and calling assertion in that scenario is not always
> a good idea.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors
  2023-11-20 14:41 ` [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors Andy Shevchenko
@ 2023-11-26 22:03   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 22:03 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

On Mon, Nov 20, 2023 at 04:41:45PM +0200, Andy Shevchenko wrote:
> PCI core, after pcim_enable_device(), takes care about the allocated
> IRQ vectors, no need to do it explicitly and break the cleaning up
> order.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe()
  2023-11-20 14:41 ` [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe() Andy Shevchenko
@ 2023-11-26 22:23   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 22:23 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:46PM +0200, Andy Shevchenko wrote:
> We should not mix managed calls with non-managed. This will break
> the calls order at the error path and ->remove() stages. Fix this
> by wrapping lock probe to become managed one.
> 
> Fixes: 78d5e9e299e3 ("i2c: designware: Add AMD PSP I2C bus support")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop
  2023-11-20 14:41 ` [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop Andy Shevchenko
@ 2023-11-26 22:27   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 22:27 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:47PM +0200, Andy Shevchenko wrote:
> Replace a while-loop by for-loop in i2c_dw_probe_lock_support() to
> save a few lines of code.
> 
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index
  2023-11-20 14:41 ` [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index Andy Shevchenko
@ 2023-11-26 22:38   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-26 22:38 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:48PM +0200, Andy Shevchenko wrote:
> Instead of saving index and do an additional level of referencing,
> save just a pointer to the semaphore callbacks directly. It makes
> code cleaner.
> 
> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name
  2023-11-20 14:41 ` [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name Andy Shevchenko
@ 2023-11-27 23:54   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-27 23:54 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:49PM +0200, Andy Shevchenko wrote:
> Add missing 'c' into i2c_designware_pci_ids variable name.
> 
> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/i2c/busses/i2c-designware-pcidrv.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busses/i2c-designware-pcidrv.c
> index e67956845c19..ed2f9e7ba5d3 100644
> --- a/drivers/i2c/busses/i2c-designware-pcidrv.c
> +++ b/drivers/i2c/busses/i2c-designware-pcidrv.c
> @@ -355,7 +355,7 @@ static void i2c_dw_pci_remove(struct pci_dev *pdev)
>  	i2c_del_adapter(&dev->adapter);
>  }
>  
> -static const struct pci_device_id i2_designware_pci_ids[] = {
> +static const struct pci_device_id i2c_designware_pci_ids[] = {
>  	/* Medfield */
>  	{ PCI_VDEVICE(INTEL, 0x0817), medfield },
>  	{ PCI_VDEVICE(INTEL, 0x0818), medfield },
> @@ -403,16 +403,16 @@ static const struct pci_device_id i2_designware_pci_ids[] = {
>  	{ PCI_VDEVICE(ATI,  0x7464), navi_amd },
>  	{ 0,}
>  };
> -MODULE_DEVICE_TABLE(pci, i2_designware_pci_ids);
> +MODULE_DEVICE_TABLE(pci, i2c_designware_pci_ids);
>  
>  static struct pci_driver dw_i2c_driver = {
>  	.name		= DRIVER_NAME,
> -	.id_table	= i2_designware_pci_ids,
>  	.probe		= i2c_dw_pci_probe,
>  	.remove		= i2c_dw_pci_remove,
>  	.driver         = {
>  		.pm     = &i2c_dw_pm_ops,
>  	},
> +	.id_table	= i2c_designware_pci_ids,

why this change?

Thanks,
Andi

>  };
>  module_pci_driver(dw_i2c_driver);
>  
> -- 
> 2.43.0.rc1.1.gbec44491f096
> 

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

* Re: [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables
  2023-11-20 14:41 ` [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables Andy Shevchenko
@ 2023-11-27 23:56   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-27 23:56 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:51PM +0200, Andy Shevchenko wrote:
> Make the terminator entry look the same in all device ID tables.
> 
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces
  2023-11-20 14:41 ` [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces Andy Shevchenko
@ 2023-11-28 17:48   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-28 17:48 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:58PM +0200, Andy Shevchenko wrote:
> Reduce scope of the I²C DesignWare driver exports to I2C_DW namespaces.
> This will prevent abuse of the symbols and clean up global namespace.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 17/24] i2c: designware: Remove ->disable() callback
  2023-11-20 14:41 ` [PATCH v4 17/24] i2c: designware: Remove ->disable() callback Andy Shevchenko
@ 2023-11-29  0:47   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29  0:47 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:41:59PM +0200, Andy Shevchenko wrote:
> Commit 90312351fd1e ("i2c: designware: MASTER mode as separated driver")
> introduced ->disable() callback but there is no real use for it. Both
> i2c-designware-master.c and i2c-designware-slave.c set it to the same
> i2c_dw_disable() and scope is inside the same kernel module.
> 
> That said, replace the callback by explicitly calling the i2c_dw_disable().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 18/24] i2c: designware: Consolidate PM ops
  2023-11-20 14:42 ` [PATCH v4 18/24] i2c: designware: Consolidate PM ops Andy Shevchenko
@ 2023-11-29 23:08   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:08 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:42:00PM +0200, Andy Shevchenko wrote:
> We have the same (*) PM ops in the PCI and plaform drivers.
> Instead, consolidate that PM ops under exported variable and
> deduplicate them.
> 
> *)
> With the subtle ACPI and P-Unit behaviour differences in PCI case.
> But this is not a problem as for ACPI we need to take care of the
> P-Unit semaphore anyway and calling PM ops for ACPI makes sense as
> it might provide specific operation regions in (however there are
> no known devices on market that are using it with PCI enabled I2C).
> Note, the clocks are not in use in the PCI case.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

The comment in the "prepare" function is a bit cryptic, though it
took me some time to disentangle from the double/triple negations :-)

Thanks,
Andi

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

* Re: [PATCH v4 20/24] i2c: designware: Propagate firmware node
  2023-11-20 14:42 ` [PATCH v4 20/24] i2c: designware: Propagate firmware node Andy Shevchenko
@ 2023-11-29 23:09   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:09 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:42:02PM +0200, Andy Shevchenko wrote:
> Propagate firmware node by using a specific API call, i.e. device_set_node().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata()
  2023-11-20 14:42 ` [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata() Andy Shevchenko
@ 2023-11-29 23:10   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:10 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:42:03PM +0200, Andy Shevchenko wrote:
> Use the wrapper function for getting the driver data using pci_dev
> instead of using dev_get_drvdata() with &pdev->dev, so we can directly
> pass a struct pci_dev. This is a purely cosmetic change.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device
  2023-11-20 14:42 ` [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device Andy Shevchenko
@ 2023-11-29 23:12   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:12 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:42:04PM +0200, Andy Shevchenko wrote:
> Use temporary variable for struct device to make code neater.
> 
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks,
Andi

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

* Re: [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments
  2023-11-20 14:42 ` [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments Andy Shevchenko
@ 2023-11-29 23:20   ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:20 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

[...]

> @@ -210,12 +210,12 @@ static void psp_release_i2c_bus(void)
>  {
>  	mutex_lock(&psp_i2c_access_mutex);
>  
> -	/* Return early if mailbox was malfunctional */
> +	/* Return early if mailbox was malfunctioned */

has malfunctioned?

>  	if (psp_i2c_mbox_fail)
>  		goto cleanup;
>  
>  	/*
> -	 * If we are last owner of PSP semaphore, need to release aribtration
> +	 * If we are last owner of PSP semaphore, need to release arbitration
>  	 * via mailbox.
>  	 */

as we are at this, perhaps we can add some articles and pronouns
to improve the grammar:

	/*
	 * If we are the last owner of the PSP semaphore, we need to release
	 * arbitration via the mailbox
	 */

Rest looks good.

Thanks,
Andi

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

* Re: [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe()
  2023-11-20 14:42 ` [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe() Andy Shevchenko
@ 2023-11-29 23:21   ` Andi Shyti
  2023-11-30 13:28     ` Andy Shevchenko
  0 siblings, 1 reply; 45+ messages in thread
From: Andi Shyti @ 2023-11-29 23:21 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Mon, Nov 20, 2023 at 04:42:01PM +0200, Andy Shevchenko wrote:
> Since i2c_dw_probe() is going to be extended, uninline it to reduce
> the noise in the common header.

where is it going to be extended? It's not in thie series. I'm
fine with the patch anyway as it cleans up the header file.

Thanks,
Andi

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

* Re: [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe()
  2023-11-29 23:21   ` Andi Shyti
@ 2023-11-30 13:28     ` Andy Shevchenko
  2023-12-03 22:06       ` Andi Shyti
  0 siblings, 1 reply; 45+ messages in thread
From: Andy Shevchenko @ 2023-11-30 13:28 UTC (permalink / raw)
  To: Andi Shyti
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

On Thu, Nov 30, 2023 at 12:21:51AM +0100, Andi Shyti wrote:
> Hi Andy,
> 
> On Mon, Nov 20, 2023 at 04:42:01PM +0200, Andy Shevchenko wrote:
> > Since i2c_dw_probe() is going to be extended, uninline it to reduce
> > the noise in the common header.
> 
> where is it going to be extended? It's not in thie series. I'm
> fine with the patch anyway as it cleans up the header file.

It's used to be in the previous versions of the series where I have
device_set_node() API to be used.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe()
  2023-11-30 13:28     ` Andy Shevchenko
@ 2023-12-03 22:06       ` Andi Shyti
  0 siblings, 0 replies; 45+ messages in thread
From: Andi Shyti @ 2023-12-03 22:06 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Mario Limonciello, Jarkko Nikula, Herbert Xu, Wolfram Sang,
	linux-i2c, linux-kernel, Mika Westerberg, Jan Dabros,
	Philipp Zabel

Hi Andy,

On Thu, Nov 30, 2023 at 03:28:18PM +0200, Andy Shevchenko wrote:
> On Thu, Nov 30, 2023 at 12:21:51AM +0100, Andi Shyti wrote:
> > Hi Andy,
> > 
> > On Mon, Nov 20, 2023 at 04:42:01PM +0200, Andy Shevchenko wrote:
> > > Since i2c_dw_probe() is going to be extended, uninline it to reduce
> > > the noise in the common header.
> > 
> > where is it going to be extended? It's not in thie series. I'm
> > fine with the patch anyway as it cleans up the header file.
> 
> It's used to be in the previous versions of the series where I have
> device_set_node() API to be used.

Thanks! I think this missed:

Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Andi

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

end of thread, other threads:[~2023-12-03 22:06 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-20 14:41 [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 01/24] i2c: designware: Fix PM calls order in dw_i2c_plat_probe() Andy Shevchenko
2023-11-26 21:48   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 02/24] i2c: designware: Fix reset call " Andy Shevchenko
2023-11-26 21:57   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 03/24] i2c: designware: Let PCI core to take care about interrupt vectors Andy Shevchenko
2023-11-26 22:03   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 04/24] i2c: designware: Fix lock probe call order in dw_i2c_plat_probe() Andy Shevchenko
2023-11-26 22:23   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 05/24] i2c: designware: Replace a while-loop by for-loop Andy Shevchenko
2023-11-26 22:27   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 06/24] i2c: designware: Save pointer to semaphore callbacks instead of index Andy Shevchenko
2023-11-26 22:38   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 07/24] i2c: designware: Add missing 'c' into PCI IDs variable name Andy Shevchenko
2023-11-27 23:54   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 08/24] i2c: designware: Replace MODULE_ALIAS() with MODULE_DEVICE_TABLE() Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 09/24] i2c: designware: Unify terminator in device ID tables Andy Shevchenko
2023-11-27 23:56   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 10/24] i2c: designware: Always provide " Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 11/24] i2c: designware: Drop return value from i2c_dw_acpi_configure() Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 12/24] i2c: designware: Drop return value from dw_i2c_of_configure() Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 13/24] i2c: designware: Rename dw_i2c_of_configure() -> i2c_dw_of_configure() Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 14/24] i2c: designware: Consolidate firmware parsing and configuring code Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 15/24] i2c: designware: Unify the firmware type checks Andy Shevchenko
2023-11-20 14:41 ` [PATCH v4 16/24] i2c: designware: Move exports to I2C_DW namespaces Andy Shevchenko
2023-11-28 17:48   ` Andi Shyti
2023-11-20 14:41 ` [PATCH v4 17/24] i2c: designware: Remove ->disable() callback Andy Shevchenko
2023-11-29  0:47   ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 18/24] i2c: designware: Consolidate PM ops Andy Shevchenko
2023-11-29 23:08   ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 19/24] i2c: designware: Uninline i2c_dw_probe() Andy Shevchenko
2023-11-29 23:21   ` Andi Shyti
2023-11-30 13:28     ` Andy Shevchenko
2023-12-03 22:06       ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 20/24] i2c: designware: Propagate firmware node Andy Shevchenko
2023-11-29 23:09   ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 21/24] i2c: designware: Use pci_get_drvdata() Andy Shevchenko
2023-11-29 23:10   ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 22/24] i2c: designware: Use temporary variable for struct device Andy Shevchenko
2023-11-29 23:12   ` Andi Shyti
2023-11-20 14:42 ` [PATCH v4 23/24] i2c: designware: Get rid of redundant 'else' Andy Shevchenko
2023-11-20 14:42 ` [PATCH v4 24/24] i2c: designware: Fix spelling and other issues in the comments Andy Shevchenko
2023-11-29 23:20   ` Andi Shyti
2023-11-21 14:30 ` [PATCH v4 00/24] i2c: designware: code consolidation & cleanups Jarkko Nikula
2023-11-21 16:08 ` Serge Semin

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.