On Thu, Jun 15, 2023 at 06:11:24PM +0100, Lee Jones wrote:
On Mon, 05 Jun 2023, Charles Keepax wrote:
+// SPDX-License-Identifier: GPL-2.0 +// +// CS42L43 I2C driver +// +// Copyright (C) 2022-2023 Cirrus Logic, Inc. and +// Cirrus Logic International Semiconductor Ltd.
I realise there is some precedent for this already in MFD.
However, I'd rather headers used C style multi-line comments.
Apologies but just to be super clear you want this to look like:
// SPDX-License-Identifier: GPL-2.0 /* * CS42L43 I2C driver * * Copyright (C) 2022-2023 Cirrus Logic, Inc. and * Cirrus Logic International Semiconductor Ltd. */
Just clarifying since you want to get rid of all the // comments, but the SPDX stuff specifically requires one according to Documentation/process/license-rules.rst.
- // I2C is always attached by definition
C please. And everywhere else.
Can do.
+static struct i2c_device_id cs42l43_i2c_id[] = {
- { "cs42l43", 0 },
- {}
+}; +MODULE_DEVICE_TABLE(i2c, cs42l43_i2c_id);
Is this required anymore?
I was not aware of it not being required, I think it will still be used for the purposes of module naming. Perhaps someone more knowledgable than me can comment?
+#if IS_ENABLED(CONFIG_MFD_CS42L43_I2C) +const struct regmap_config cs42l43_i2c_regmap = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
- .reg_format_endian = REGMAP_ENDIAN_BIG,
- .val_format_endian = REGMAP_ENDIAN_BIG,
- .max_register = CS42L43_MCU_RAM_MAX,
- .readable_reg = cs42l43_readable_register,
- .volatile_reg = cs42l43_volatile_register,
- .precious_reg = cs42l43_precious_register,
- .cache_type = REGCACHE_RBTREE,
- .reg_defaults = cs42l43_reg_default,
- .num_reg_defaults = ARRAY_SIZE(cs42l43_reg_default),
+}; +EXPORT_SYMBOL_NS_GPL(cs42l43_i2c_regmap, MFD_CS42L43); +#endif
We don't tend to like #ifery in C files.
Why is it required?
And why not just put them were they're consumed?
The trouble is the cs42l43_reg_default array and the array size. There is no good way to statically initialise those two fields from a single array in both the I2C and SDW modules.
+static int cs42l43_soft_reset(struct cs42l43 *cs42l43) +{
- static const struct reg_sequence reset[] = {
{ CS42L43_SFT_RESET, 0x5A000000 },
- };
- unsigned long time;
- dev_dbg(cs42l43->dev, "Soft resetting\n");
How often are you realistically going to enable these? Can you do without them and just add some printks when debugging? Seems a shame to dirty the code-base with seldom used / questionably helpful LoC.
I mean I use them all the time they are very helpful. But yeah I can just add them each time I need them its just a pain, but I guess since you are the second person to comment I will accept that wanting to easily turn on debug is not a feature we are keen on.
- reinit_completion(&cs42l43->device_detach);
- /* apply cache only as the device will also fall off the soundwire bus */
Grammar please. Some capital letters missing there.
No problem.
- regcache_cache_only(cs42l43->regmap, true);
- regmap_multi_reg_write_bypassed(cs42l43->regmap, reset, ARRAY_SIZE(reset));
- msleep(20);
Why 20?
Because that is what the hardware needs, I assume this will be covered when I turn all number in to defines.
+static int cs42l43_mcu_stage_2_3(struct cs42l43 *cs42l43, bool shadow) +{
- unsigned int need_reg = CS42L43_NEED_CONFIGS;
- unsigned int val;
- int ret;
- if (shadow)
What's shadow? Comment please.
Yeah can add a comment for that.
need_reg = CS42L43_FW_SH_BOOT_CFG_NEED_CONFIGS;
- regmap_write(cs42l43->regmap, need_reg, 0x0);
- ret = regmap_read_poll_timeout(cs42l43->regmap, CS42L43_BOOT_STATUS,
val, (val == 3), 5000, 20000);
Defines are easier to read than magic numbers.
Can do.
- if (ret) {
dev_err(cs42l43->dev, "Failed to move to stage 3: %d, 0x%x\n", ret, val);
Stage 3 what?
Of the MCU boot.
Perhaps some simple function headers would help?
You mean add some kernel doc for these functions, right? Assuming that is what you mean, will do.
Thanks, Charles