2024-01-25 10:26:43

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 1/6] spi: cs42l43: Tidy up header includes

Including some missing headers.

Suggested-by: Andy Shevchenko <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
Acked-by: Mark Brown <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

No changes since v2.

Thanks,
Charles

drivers/spi/spi-cs42l43.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/spi/spi-cs42l43.c b/drivers/spi/spi-cs42l43.c
index d239fc5a49ccc..fb62807fc991c 100644
--- a/drivers/spi/spi-cs42l43.c
+++ b/drivers/spi/spi-cs42l43.c
@@ -11,7 +11,9 @@
#include <linux/errno.h>
#include <linux/mfd/cs42l43.h>
#include <linux/mfd/cs42l43-regs.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
--
2.30.2



2024-01-25 10:26:52

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 2/6] mfd: cs42l43: Tidy up header includes

Use more forward declarations, move header guards to cover other
includes, and rely less on including headers through other headers.

Suggested-by: Andy Shevchenko <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

Changes since v2:
- Added pm.h and regmap.h back into mfd/cs42l43.h

Thanks,
Charles

drivers/mfd/cs42l43-i2c.c | 6 +++++-
drivers/mfd/cs42l43-sdw.c | 6 +++++-
drivers/mfd/cs42l43.c | 8 +++++++-
drivers/mfd/cs42l43.h | 10 ++++++----
include/linux/mfd/cs42l43.h | 13 +++++++------
5 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/drivers/mfd/cs42l43-i2c.c b/drivers/mfd/cs42l43-i2c.c
index 4922211680c96..7162274a0b551 100644
--- a/drivers/mfd/cs42l43-i2c.c
+++ b/drivers/mfd/cs42l43-i2c.c
@@ -6,11 +6,15 @@
* Cirrus Logic International Semiconductor Ltd.
*/

+#include <linux/array_size.h>
#include <linux/err.h>
-#include <linux/errno.h>
#include <linux/i2c.h>
+#include <linux/mfd/cs42l43.h>
#include <linux/mfd/cs42l43-regs.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>

#include "cs42l43.h"

diff --git a/drivers/mfd/cs42l43-sdw.c b/drivers/mfd/cs42l43-sdw.c
index 1d85bbf8cdd5d..d6962a5a35f65 100644
--- a/drivers/mfd/cs42l43-sdw.c
+++ b/drivers/mfd/cs42l43-sdw.c
@@ -6,11 +6,15 @@
* Cirrus Logic International Semiconductor Ltd.
*/

+#include <linux/array_size.h>
#include <linux/device.h>
#include <linux/err.h>
-#include <linux/errno.h>
+#include <linux/mfd/cs42l43.h>
#include <linux/mfd/cs42l43-regs.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
#include <linux/soundwire/sdw.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/soundwire/sdw_type.h>
diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c
index 7b6d07cbe6fc6..4e2bc5ad244a5 100644
--- a/drivers/mfd/cs42l43.c
+++ b/drivers/mfd/cs42l43.c
@@ -6,18 +6,24 @@
* Cirrus Logic International Semiconductor Ltd.
*/

+#include <linux/array_size.h>
#include <linux/bitops.h>
#include <linux/build_bug.h>
#include <linux/delay.h>
+#include <linux/device.h>
#include <linux/err.h>
-#include <linux/errno.h>
#include <linux/firmware.h>
+#include <linux/gpio/consumer.h>
#include <linux/jiffies.h>
#include <linux/mfd/core.h>
+#include <linux/mfd/cs42l43.h>
#include <linux/mfd/cs42l43-regs.h>
#include <linux/module.h>
+#include <linux/pm.h>
#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
#include <linux/soundwire/sdw.h>
+#include <linux/types.h>

#include "cs42l43.h"

diff --git a/drivers/mfd/cs42l43.h b/drivers/mfd/cs42l43.h
index eb4caf3938332..aded994b7046b 100644
--- a/drivers/mfd/cs42l43.h
+++ b/drivers/mfd/cs42l43.h
@@ -6,15 +6,17 @@
* Cirrus Logic International Semiconductor Ltd.
*/

-#include <linux/mfd/cs42l43.h>
-#include <linux/pm.h>
-#include <linux/regmap.h>
-
#ifndef CS42L43_CORE_INT_H
#define CS42L43_CORE_INT_H

+#include <linux/pm.h>
+#include <linux/regmap.h>
+
#define CS42L43_N_DEFAULTS 176

+struct cs42l43;
+struct device;
+
extern const struct dev_pm_ops cs42l43_pm_ops;
extern const struct reg_default cs42l43_reg_default[CS42L43_N_DEFAULTS];

diff --git a/include/linux/mfd/cs42l43.h b/include/linux/mfd/cs42l43.h
index cf8263aab41bd..2239d8585e785 100644
--- a/include/linux/mfd/cs42l43.h
+++ b/include/linux/mfd/cs42l43.h
@@ -6,20 +6,21 @@
* Cirrus Logic International Semiconductor Ltd.
*/

+#ifndef CS42L43_CORE_EXT_H
+#define CS42L43_CORE_EXT_H
+
#include <linux/completion.h>
-#include <linux/device.h>
-#include <linux/gpio/consumer.h>
#include <linux/mutex.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
-#include <linux/soundwire/sdw.h>
#include <linux/workqueue.h>

-#ifndef CS42L43_CORE_EXT_H
-#define CS42L43_CORE_EXT_H
-
#define CS42L43_N_SUPPLIES 3

+struct device;
+struct gpio_desc;
+struct sdw_slave;
+
enum cs42l43_irq_numbers {
CS42L43_PLL_LOST_LOCK,
CS42L43_PLL_READY,
--
2.30.2


2024-01-25 10:27:19

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 5/6] mfd: cs42l43: Add some missing dev_err_probe()s

Use of dev_err_probe() was missed in the i2c and sdw parts of the code,
update the missing parts.

Suggested-by: Andy Shevchenko <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

Changes since v2:
- Added brackets in the commit message for functions

Thanks,
Charles

drivers/mfd/cs42l43-i2c.c | 9 +++------
drivers/mfd/cs42l43-sdw.c | 9 +++------
2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/mfd/cs42l43-i2c.c b/drivers/mfd/cs42l43-i2c.c
index 7162274a0b551..c9e4ea76149a8 100644
--- a/drivers/mfd/cs42l43-i2c.c
+++ b/drivers/mfd/cs42l43-i2c.c
@@ -38,7 +38,6 @@ static const struct regmap_config cs42l43_i2c_regmap = {
static int cs42l43_i2c_probe(struct i2c_client *i2c)
{
struct cs42l43 *cs42l43;
- int ret;

cs42l43 = devm_kzalloc(&i2c->dev, sizeof(*cs42l43), GFP_KERNEL);
if (!cs42l43)
@@ -50,11 +49,9 @@ static int cs42l43_i2c_probe(struct i2c_client *i2c)
cs42l43->attached = true;

cs42l43->regmap = devm_regmap_init_i2c(i2c, &cs42l43_i2c_regmap);
- if (IS_ERR(cs42l43->regmap)) {
- ret = PTR_ERR(cs42l43->regmap);
- dev_err(cs42l43->dev, "Failed to allocate regmap: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(cs42l43->regmap))
+ return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->regmap),
+ "Failed to allocate regmap\n");

return cs42l43_dev_probe(cs42l43);
}
diff --git a/drivers/mfd/cs42l43-sdw.c b/drivers/mfd/cs42l43-sdw.c
index d6962a5a35f65..65f7b1d782486 100644
--- a/drivers/mfd/cs42l43-sdw.c
+++ b/drivers/mfd/cs42l43-sdw.c
@@ -171,7 +171,6 @@ static int cs42l43_sdw_probe(struct sdw_slave *sdw, const struct sdw_device_id *
{
struct cs42l43 *cs42l43;
struct device *dev = &sdw->dev;
- int ret;

cs42l43 = devm_kzalloc(dev, sizeof(*cs42l43), GFP_KERNEL);
if (!cs42l43)
@@ -181,11 +180,9 @@ static int cs42l43_sdw_probe(struct sdw_slave *sdw, const struct sdw_device_id *
cs42l43->sdw = sdw;

cs42l43->regmap = devm_regmap_init_sdw(sdw, &cs42l43_sdw_regmap);
- if (IS_ERR(cs42l43->regmap)) {
- ret = PTR_ERR(cs42l43->regmap);
- dev_err(cs42l43->dev, "Failed to allocate regmap: %d\n", ret);
- return ret;
- }
+ if (IS_ERR(cs42l43->regmap))
+ return dev_err_probe(cs42l43->dev, PTR_ERR(cs42l43->regmap),
+ "Failed to allocate regmap\n");

return cs42l43_dev_probe(cs42l43);
}
--
2.30.2


2024-01-25 10:28:58

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 6/6] mfd: cs42l43: Handle error from devm_pm_runtime_enable()

As it devm_pm_runtime_enable() can fail due to memory allocations, it
is best to handle the error.

Suggested-by: Andy Shevchenko <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

No changes since v2.

Thanks,
Charles

drivers/mfd/cs42l43.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c
index aea0f8f485785..56bd9dbbe10b0 100644
--- a/drivers/mfd/cs42l43.c
+++ b/drivers/mfd/cs42l43.c
@@ -1065,7 +1065,9 @@ int cs42l43_dev_probe(struct cs42l43 *cs42l43)
* the boot work runs.
*/
pm_runtime_get_noresume(cs42l43->dev);
- devm_pm_runtime_enable(cs42l43->dev);
+ ret = devm_pm_runtime_enable(cs42l43->dev);
+ if (ret)
+ return ret;

queue_work(system_long_wq, &cs42l43->boot_work);

--
2.30.2


2024-01-25 11:01:00

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 4/6] mfd: cs42l43: Add time postfixes on defines

Suggested-by: Andy Shevchenko <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

No changes since v2.

Thanks,
Charles

drivers/mfd/cs42l43.c | 36 ++++++++++++++++++------------------
1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c
index 65a331481d975..aea0f8f485785 100644
--- a/drivers/mfd/cs42l43.c
+++ b/drivers/mfd/cs42l43.c
@@ -27,30 +27,30 @@

#include "cs42l43.h"

-#define CS42L43_RESET_DELAY 20
+#define CS42L43_RESET_DELAY_MS 20

-#define CS42L43_SDW_ATTACH_TIMEOUT 500
-#define CS42L43_SDW_DETACH_TIMEOUT 100
+#define CS42L43_SDW_ATTACH_TIMEOUT_MS 500
+#define CS42L43_SDW_DETACH_TIMEOUT_MS 100

#define CS42L43_MCU_BOOT_STAGE1 1
#define CS42L43_MCU_BOOT_STAGE2 2
#define CS42L43_MCU_BOOT_STAGE3 3
#define CS42L43_MCU_BOOT_STAGE4 4
-#define CS42L43_MCU_POLL 5000
-#define CS42L43_MCU_CMD_TIMEOUT 20000
+#define CS42L43_MCU_POLL_US 5000
+#define CS42L43_MCU_CMD_TIMEOUT_US 20000
#define CS42L43_MCU_UPDATE_FORMAT 3
#define CS42L43_MCU_UPDATE_OFFSET 0x100000
-#define CS42L43_MCU_UPDATE_TIMEOUT 500000
+#define CS42L43_MCU_UPDATE_TIMEOUT_US 500000
#define CS42L43_MCU_UPDATE_RETRIES 5

#define CS42L43_MCU_SUPPORTED_REV 0x2105
#define CS42L43_MCU_SHADOW_REGS_REQUIRED_REV 0x2200
#define CS42L43_MCU_SUPPORTED_BIOS_REV 0x0001

-#define CS42L43_VDDP_DELAY 50
-#define CS42L43_VDDD_DELAY 1000
+#define CS42L43_VDDP_DELAY_US 50
+#define CS42L43_VDDD_DELAY_US 1000

-#define CS42L43_AUTOSUSPEND_TIME 250
+#define CS42L43_AUTOSUSPEND_TIME_MS 250

struct cs42l43_patch_header {
__le16 version;
@@ -538,10 +538,10 @@ static int cs42l43_soft_reset(struct cs42l43 *cs42l43)
regcache_cache_only(cs42l43->regmap, true);
regmap_multi_reg_write_bypassed(cs42l43->regmap, reset, ARRAY_SIZE(reset));

- msleep(CS42L43_RESET_DELAY);
+ msleep(CS42L43_RESET_DELAY_MS);

if (cs42l43->sdw) {
- unsigned long timeout = msecs_to_jiffies(CS42L43_SDW_DETACH_TIMEOUT);
+ unsigned long timeout = msecs_to_jiffies(CS42L43_SDW_DETACH_TIMEOUT_MS);
unsigned long time;

time = wait_for_completion_timeout(&cs42l43->device_detach, timeout);
@@ -561,7 +561,7 @@ static int cs42l43_soft_reset(struct cs42l43 *cs42l43)
static int cs42l43_wait_for_attach(struct cs42l43 *cs42l43)
{
if (!cs42l43->attached) {
- unsigned long timeout = msecs_to_jiffies(CS42L43_SDW_ATTACH_TIMEOUT);
+ unsigned long timeout = msecs_to_jiffies(CS42L43_SDW_ATTACH_TIMEOUT_MS);
unsigned long time;

time = wait_for_completion_timeout(&cs42l43->device_attach, timeout);
@@ -603,7 +603,7 @@ static int cs42l43_mcu_stage_2_3(struct cs42l43 *cs42l43, bool shadow)

ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_BOOT_STATUS,
val, (val == CS42L43_MCU_BOOT_STAGE3),
- CS42L43_MCU_POLL, CS42L43_MCU_CMD_TIMEOUT);
+ CS42L43_MCU_POLL_US, CS42L43_MCU_CMD_TIMEOUT_US);
if (ret) {
dev_err(cs42l43->dev, "Failed to move to stage 3: %d, 0x%x\n", ret, val);
return ret;
@@ -652,7 +652,7 @@ static int cs42l43_mcu_disable(struct cs42l43 *cs42l43)

ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_SOFT_INT_SHADOW, val,
(val & CS42L43_CONTROL_APPLIED_INT_MASK),
- CS42L43_MCU_POLL, CS42L43_MCU_CMD_TIMEOUT);
+ CS42L43_MCU_POLL_US, CS42L43_MCU_CMD_TIMEOUT_US);
if (ret) {
dev_err(cs42l43->dev, "Failed to disable firmware: %d, 0x%x\n", ret, val);
return ret;
@@ -696,7 +696,7 @@ static void cs42l43_mcu_load_firmware(const struct firmware *firmware, void *con

ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_SOFT_INT_SHADOW, val,
(val & CS42L43_PATCH_APPLIED_INT_MASK),
- CS42L43_MCU_POLL, CS42L43_MCU_UPDATE_TIMEOUT);
+ CS42L43_MCU_POLL_US, CS42L43_MCU_UPDATE_TIMEOUT_US);
if (ret) {
dev_err(cs42l43->dev, "Failed to update firmware: %d, 0x%x\n", ret, val);
cs42l43->firmware_error = ret;
@@ -957,7 +957,7 @@ static int cs42l43_power_up(struct cs42l43 *cs42l43)
}

/* vdd-p must be on for 50uS before any other supply */
- usleep_range(CS42L43_VDDP_DELAY, 2 * CS42L43_VDDP_DELAY);
+ usleep_range(CS42L43_VDDP_DELAY_US, 2 * CS42L43_VDDP_DELAY_US);

gpiod_set_value_cansleep(cs42l43->reset, 1);

@@ -973,7 +973,7 @@ static int cs42l43_power_up(struct cs42l43 *cs42l43)
goto err_core_supplies;
}

- usleep_range(CS42L43_VDDD_DELAY, 2 * CS42L43_VDDD_DELAY);
+ usleep_range(CS42L43_VDDD_DELAY_US, 2 * CS42L43_VDDD_DELAY_US);

return 0;

@@ -1057,7 +1057,7 @@ int cs42l43_dev_probe(struct cs42l43 *cs42l43)
if (ret)
return ret;

- pm_runtime_set_autosuspend_delay(cs42l43->dev, CS42L43_AUTOSUSPEND_TIME);
+ pm_runtime_set_autosuspend_delay(cs42l43->dev, CS42L43_AUTOSUSPEND_TIME_MS);
pm_runtime_use_autosuspend(cs42l43->dev);
pm_runtime_set_active(cs42l43->dev);
/*
--
2.30.2


2024-01-25 11:01:08

by Charles Keepax

[permalink] [raw]
Subject: [PATCH v3 3/6] mfd: cs42l43: Use __u8 type rather than u8 for firmware interface

__xxx is the preferred type for firmware interfaces.

Suggested-by: Andy Shevchenko <[email protected]>
Signed-off-by: Charles Keepax <[email protected]>
---

Changes since v2:
- Added commit message

Thanks,
Charles

drivers/mfd/cs42l43.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/cs42l43.c b/drivers/mfd/cs42l43.c
index 4e2bc5ad244a5..65a331481d975 100644
--- a/drivers/mfd/cs42l43.c
+++ b/drivers/mfd/cs42l43.c
@@ -55,8 +55,8 @@
struct cs42l43_patch_header {
__le16 version;
__le16 size;
- u8 reserved;
- u8 secure;
+ __u8 reserved;
+ __u8 secure;
__le16 bss_size;
__le32 apply_addr;
__le32 checksum;
--
2.30.2


2024-01-25 13:55:23

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v3 2/6] mfd: cs42l43: Tidy up header includes

On Thu, 25 Jan 2024, Charles Keepax wrote:

> Use more forward declarations, move header guards to cover other
> includes, and rely less on including headers through other headers.
>
> Suggested-by: Andy Shevchenko <[email protected]>

Patches look okay to me, but seeing as Andy suggested the changes, it
would be good to get a R-by from him.

> Signed-off-by: Charles Keepax <[email protected]>
> ---
>
> Changes since v2:
> - Added pm.h and regmap.h back into mfd/cs42l43.h
>
> Thanks,
> Charles
>
> drivers/mfd/cs42l43-i2c.c | 6 +++++-
> drivers/mfd/cs42l43-sdw.c | 6 +++++-
> drivers/mfd/cs42l43.c | 8 +++++++-
> drivers/mfd/cs42l43.h | 10 ++++++----
> include/linux/mfd/cs42l43.h | 13 +++++++------
> 5 files changed, 30 insertions(+), 13 deletions(-)

--
Lee Jones [李琼斯]

2024-01-25 18:50:42

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v3 4/6] mfd: cs42l43: Add time postfixes on defines

On Thu, Jan 25, 2024 at 12:25 PM Charles Keepax
<[email protected]> wrote:

Missed commit message creation?

> Suggested-by: Andy Shevchenko <[email protected]>
> Signed-off-by: Charles Keepax <[email protected]>

--
With Best Regards,
Andy Shevchenko

2024-01-25 18:56:22

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v3 2/6] mfd: cs42l43: Tidy up header includes

On Thu, Jan 25, 2024 at 3:55 PM Lee Jones <[email protected]> wrote:
> On Thu, 25 Jan 2024, Charles Keepax wrote:
>
> > Use more forward declarations, move header guards to cover other
> > includes, and rely less on including headers through other headers.
> >
> > Suggested-by: Andy Shevchenko <[email protected]>
>
> Patches look okay to me, but seeing as Andy suggested the changes, it
> would be good to get a R-by from him.

I'm worried now only about missing a commit message in one patch and
(with less severity) the v2 of this one which appears not to be
necessary (i.e. v1 is fully okay). If you consider the commit message
absence is okay, feel free to apply v2, otherwise with that addressed
v3 can go in my opinion.

Reviewed-by: Andy Shevchenko <[email protected]>



--
With Best Regards,
Andy Shevchenko

2024-01-25 19:01:16

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH v3 2/6] mfd: cs42l43: Tidy up header includes

On Thu, Jan 25, 2024 at 12:25 PM Charles Keepax
<[email protected]> wrote:
>
> Use more forward declarations, move header guards to cover other
> includes, and rely less on including headers through other headers.

..

> Changes since v2:
> - Added pm.h and regmap.h back into mfd/cs42l43.h

Btw, TIL that your v1 was fully correct as there is no use of the type
definitions. In case you are going to send v3, you can use v1 of this
patch if you want, this version is also okay (as we have some more
like this pattern, which probably needs to be amended in the future).

--
With Best Regards,
Andy Shevchenko

2024-01-26 10:04:03

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v3 2/6] mfd: cs42l43: Tidy up header includes

On Thu, 25 Jan 2024, Andy Shevchenko wrote:

> On Thu, Jan 25, 2024 at 3:55 PM Lee Jones <[email protected]> wrote:
> > On Thu, 25 Jan 2024, Charles Keepax wrote:
> >
> > > Use more forward declarations, move header guards to cover other
> > > includes, and rely less on including headers through other headers.
> > >
> > > Suggested-by: Andy Shevchenko <[email protected]>
> >
> > Patches look okay to me, but seeing as Andy suggested the changes, it
> > would be good to get a R-by from him.
>
> I'm worried now only about missing a commit message in one patch and
> (with less severity) the v2 of this one which appears not to be
> necessary (i.e. v1 is fully okay). If you consider the commit message
> absence is okay, feel free to apply v2, otherwise with that addressed
> v3 can go in my opinion.

Please fix-up and submit a v4 with Andy's R-bs.

> Reviewed-by: Andy Shevchenko <[email protected]>

--
Lee Jones [李琼斯]