[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240823030242.3083528-3-jiawenwu@trustnetic.com>
Date: Fri, 23 Aug 2024 11:02:41 +0800
From: Jiawen Wu <jiawenwu@...stnetic.com>
To: andi.shyti@...nel.org,
jarkko.nikula@...ux.intel.com,
andriy.shevchenko@...ux.intel.com,
mika.westerberg@...ux.intel.com,
jsd@...ihalf.com,
davem@...emloft.net,
edumazet@...gle.com,
kuba@...nel.org,
pabeni@...hat.com,
rmk+kernel@...linux.org.uk,
piotr.raczynski@...el.com,
andrew@...n.ch,
linux-i2c@...r.kernel.org,
netdev@...r.kernel.org
Cc: mengyuanlou@...-swift.com,
duanqiangwen@...-swift.com,
Jiawen Wu <jiawenwu@...stnetic.com>,
stable@...r.kernel.org
Subject: [PATCH net 2/3] i2c: designware: add device private data passing to lock functions
In order to add the hardware lock for Wangxun devices with minimal
modification, pass struct dw_i2c_dev to the acquire and release lock
functions.
Cc: stable@...r.kernel.org
Fixes: 2f8d1ed79345 ("i2c: designware: Add driver support for Wangxun 10Gb NIC")
Signed-off-by: Jiawen Wu <jiawenwu@...stnetic.com>
---
drivers/i2c/busses/i2c-designware-amdpsp.c | 4 ++--
drivers/i2c/busses/i2c-designware-baytrail.c | 14 ++++++++++++--
drivers/i2c/busses/i2c-designware-common.c | 4 ++--
drivers/i2c/busses/i2c-designware-core.h | 4 ++--
4 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/drivers/i2c/busses/i2c-designware-amdpsp.c b/drivers/i2c/busses/i2c-designware-amdpsp.c
index 63454b06e5da..ee7cc4b33f4b 100644
--- a/drivers/i2c/busses/i2c-designware-amdpsp.c
+++ b/drivers/i2c/busses/i2c-designware-amdpsp.c
@@ -167,7 +167,7 @@ static void psp_release_i2c_bus_deferred(struct work_struct *work)
}
static DECLARE_DELAYED_WORK(release_queue, psp_release_i2c_bus_deferred);
-static int psp_acquire_i2c_bus(void)
+static int psp_acquire_i2c_bus(struct dw_i2c_dev *dev)
{
int status;
@@ -206,7 +206,7 @@ static int psp_acquire_i2c_bus(void)
return 0;
}
-static void psp_release_i2c_bus(void)
+static void psp_release_i2c_bus(struct dw_i2c_dev *dev)
{
mutex_lock(&psp_i2c_access_mutex);
diff --git a/drivers/i2c/busses/i2c-designware-baytrail.c b/drivers/i2c/busses/i2c-designware-baytrail.c
index 45774aa47c28..9dde796e0fcc 100644
--- a/drivers/i2c/busses/i2c-designware-baytrail.c
+++ b/drivers/i2c/busses/i2c-designware-baytrail.c
@@ -12,6 +12,16 @@
#include "i2c-designware-core.h"
+static int iosf_mbi_block_punit_i2c_access_dev(struct dw_i2c_dev *dev)
+{
+ return iosf_mbi_block_punit_i2c_access();
+}
+
+static void iosf_mbi_unblock_punit_i2c_access_dev(struct dw_i2c_dev *dev)
+{
+ return iosf_mbi_unblock_punit_i2c_access();
+}
+
int i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev)
{
acpi_status status;
@@ -36,8 +46,8 @@ int i2c_dw_baytrail_probe_lock_support(struct dw_i2c_dev *dev)
return -EPROBE_DEFER;
dev_info(dev->dev, "I2C bus managed by PUNIT\n");
- dev->acquire_lock = iosf_mbi_block_punit_i2c_access;
- dev->release_lock = iosf_mbi_unblock_punit_i2c_access;
+ dev->acquire_lock = iosf_mbi_block_punit_i2c_access_dev;
+ dev->release_lock = iosf_mbi_unblock_punit_i2c_access_dev;
dev->shared_with_punit = true;
return 0;
diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c
index e8a688d04aee..743875090356 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -524,7 +524,7 @@ int i2c_dw_acquire_lock(struct dw_i2c_dev *dev)
if (!dev->acquire_lock)
return 0;
- ret = dev->acquire_lock();
+ ret = dev->acquire_lock(dev);
if (!ret)
return 0;
@@ -536,7 +536,7 @@ int i2c_dw_acquire_lock(struct dw_i2c_dev *dev)
void i2c_dw_release_lock(struct dw_i2c_dev *dev)
{
if (dev->release_lock)
- dev->release_lock();
+ dev->release_lock(dev);
}
/*
diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/i2c-designware-core.h
index e9606c00b8d1..12b77f464fb5 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -291,8 +291,8 @@ struct dw_i2c_dev {
u16 fp_lcnt;
u16 hs_hcnt;
u16 hs_lcnt;
- int (*acquire_lock)(void);
- void (*release_lock)(void);
+ int (*acquire_lock)(struct dw_i2c_dev *dev);
+ void (*release_lock)(struct dw_i2c_dev *dev);
int semaphore_idx;
bool shared_with_punit;
void (*disable)(struct dw_i2c_dev *dev);
--
2.27.0
Powered by blists - more mailing lists