Skip to contentSkip to conversation

ASoC: cs35l35: Add missing return in probe

PATCH In review Charles Keepax 4 participants 11 messages Mar 8, 2017 – Mar 13, 2017 5 messages not in the archive

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/5 ASoC: cs35l35: Add missing return in probe

A return statement is missing just before the error paths at the end of probe. This causes us to fall straight into the error path and disable the supplies and re-enable reset, as these are only controlled during probe this causes the part to no longer function.

---
 sound/soc/codecs/cs35l35.c | 2 ++
 1 file changed, 2 insertions(+)
sound/soc/codecs/cs35l35.c +2 -0
index 260ed42..48b45dc 100644
@@ -1509,6 +1509,8 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 		goto err;
 	}
 
+	return 0;
+
 err:
 	regulator_bulk_disable(cs35l35->num_supplies,
 			       cs35l35->supplies);
Signature · 6 lines
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#1 lore raw

PATCH 2/5 ASoC: cs35l35: Add device tree binding for I2S drive configuration

Add a binding for setting how the I2S pins are driven in unused slots, currently the chip will just use the default of drive 0, however this causes issues when multiple devices are attached to the same bus.

---
 Documentation/devicetree/bindings/sound/cs35l35.txt | 5 +++++
 1 file changed, 5 insertions(+)
Documentation/devicetree/bindings/sound/cs35l35.txt +5 -0
index 07d9c0f..958f0ea 100644
@@ -37,6 +37,11 @@ Optional properties:
   Table 3-10 of the datasheet lists drive-strength specifications
   0 = 1x (Default)
   1 = .5x
+  - cirrus,sp-drv-unused : Determines how unused slots should be driven on the
+  Serial Port.
+  0 - Hi-Z
+  2 - Drive 0's (Default)
+  3 - Drive 1's
 
   - cirrus,bst-pdn-fet-on : Boolean to determine if the Boost PDN control
   powers down with a rectification FET On or Off. If VSPK is supplied
Signature · 1 line
2.1.4

A message that is not in the archive (sent off-list or not yet received): 1488991371-22513-2-git-send-email-ckeepax-yzvPICuk2AATkU/[email protected]

#3 lore raw

Applied "ASoC: cs35l35: Add device tree binding for I2S drive configuration" to the asoc tree

The patch

ASoC: cs35l35: Add device tree binding for I2S drive configuration

has been applied to the asoc tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git

All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying to this mail.

Thanks,
Mark

Quoted 1 line

From 45114c364d476ba0bbc294d63955f49fbf378779 Mon Sep 17 00:00:00 2001

From: Charles Keepax <ckeepax-yzvPICuk2AATkU/[email protected]>
Date: Wed, 8 Mar 2017 16:42:48 +0000
Subject: [PATCH] ASoC: cs35l35: Add device tree binding for I2S drive
configuration

Add a binding for setting how the I2S pins are driven in unused slots, currently the chip will just use the default of drive 0, however this causes issues when multiple devices are attached to the same bus.

---
 Documentation/devicetree/bindings/sound/cs35l35.txt | 5 +++++
 1 file changed, 5 insertions(+)
Documentation/devicetree/bindings/sound/cs35l35.txt +5 -0
index 07d9c0f177fb..958f0eabfdfc 100644
@@ -37,6 +37,11 @@ Optional properties:
   Table 3-10 of the datasheet lists drive-strength specifications
   0 = 1x (Default)
   1 = .5x
+  - cirrus,sp-drv-unused : Determines how unused slots should be driven on the
+  Serial Port.
+  0 - Hi-Z
+  2 - Drive 0's (Default)
+  3 - Drive 1's
 
   - cirrus,bst-pdn-fet-on : Boolean to determine if the Boost PDN control
   powers down with a rectification FET On or Off. If VSPK is supplied
Signature · 6 lines
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#4 lore raw

PATCH 3/5 ASoC: cs35l35: Add for configuring drive mode in unused slots

In reply to Charles Keepax

Add support for setting how the I2S pins are driven in unused slots, currently the chip will just use the default of drive 0, however this causes issues when multiple devices are attached to the same bus.

---
 include/sound/cs35l35.h    | 2 ++
 sound/soc/codecs/cs35l35.c | 7 +++++++
 sound/soc/codecs/cs35l35.h | 4 ++++
 3 files changed, 13 insertions(+)
include/sound/cs35l35.h +2 -0
index de92e452..983c610 100644
@@ -80,6 +80,8 @@ struct cs35l35_platform_data {
 	bool stereo;
 	/* serial port drive strength */
 	int sp_drv_str;
+	/* serial port drive in unused slots */
+	int sp_drv_unused;
 	/* Boost Power Down with FET */
 	bool bst_pdn_fet_on;
 	/* Boost Voltage : used if ClassH Algo Enabled */
sound/soc/codecs/cs35l35.c +7 -0
index 48b45dc..5a9fe5a 100644
@@ -789,6 +789,11 @@ static int cs35l35_codec_probe(struct snd_soc_codec *codec)
 				CS35L35_SP_DRV_MASK,
 				cs35l35->pdata.sp_drv_str <<
 				CS35L35_SP_DRV_SHIFT);
+	if (cs35l35->pdata.sp_drv_unused)
+		regmap_update_bits(cs35l35->regmap, CS35L35_SP_FMT_CTL3,
+				   CS35L35_SP_I2S_DRV_MASK,
+				   cs35l35->pdata.sp_drv_unused <<
+				   CS35L35_SP_I2S_DRV_SHIFT);
 
 	if (classh->classh_algo_enable) {
 		if (classh->classh_bst_override)
@@ -1169,6 +1174,8 @@ static int cs35l35_handle_of_data(struct i2c_client *i2c_client,
 
 	if (of_property_read_u32(np, "cirrus,sp-drv-strength", &val32) >= 0)
 		pdata->sp_drv_str = val32;
+	if (of_property_read_u32(np, "cirrus,sp-drv-unused", &val32) >= 0)
+		pdata->sp_drv_unused = val32 | CS35L35_VALID_PDATA;
 
 	pdata->stereo = of_property_read_bool(np, "cirrus,stereo-config");
 
sound/soc/codecs/cs35l35.h +4 -0
index e27a7fe..c203081 100644
@@ -190,6 +190,10 @@
 #define CS35L35_AMP_GAIN_ZC_MASK	0x10
 #define CS35L35_AMP_GAIN_ZC_SHIFT	4
 
+/* CS35L35_SP_FMT_CTL3 */
+#define CS35L35_SP_I2S_DRV_MASK		0x03
+#define CS35L35_SP_I2S_DRV_SHIFT	0
+
 /* Class H Algorithm Control */
 #define CS35L35_CH_STEREO_MASK		0x40
 #define CS35L35_CH_STEREO_SHIFT		6
Signature · 1 line
2.1.4

A message that is not in the archive (sent off-list or not yet received): 1488991371-22513-3-git-send-email-ckeepax-yzvPICuk2AATkU/[email protected]

#6 lore raw

Applied "ASoC: cs35l35: Add for configuring drive mode in unused slots" to the asoc tree

The patch

ASoC: cs35l35: Add for configuring drive mode in unused slots

has been applied to the asoc tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git

All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying to this mail.

Thanks,
Mark

Quoted 1 line

From 8d45f2d23864ae1582d095c54605540cd3640169 Mon Sep 17 00:00:00 2001

From: Charles Keepax <ckeepax-yzvPICuk2AATkU/[email protected]>
Date: Wed, 8 Mar 2017 16:42:49 +0000
Subject: [PATCH] ASoC: cs35l35: Add for configuring drive mode in unused slots

Add support for setting how the I2S pins are driven in unused slots, currently the chip will just use the default of drive 0, however this causes issues when multiple devices are attached to the same bus.

---
 include/sound/cs35l35.h    | 2 ++
 sound/soc/codecs/cs35l35.c | 7 +++++++
 sound/soc/codecs/cs35l35.h | 4 ++++
 3 files changed, 13 insertions(+)
include/sound/cs35l35.h +2 -0
index de92e452bf93..983c610eba2e 100644
@@ -80,6 +80,8 @@ struct cs35l35_platform_data {
 	bool stereo;
 	/* serial port drive strength */
 	int sp_drv_str;
+	/* serial port drive in unused slots */
+	int sp_drv_unused;
 	/* Boost Power Down with FET */
 	bool bst_pdn_fet_on;
 	/* Boost Voltage : used if ClassH Algo Enabled */
sound/soc/codecs/cs35l35.c +7 -0
index 48b45dc904ea..5a9fe5addb86 100644
@@ -789,6 +789,11 @@ static int cs35l35_codec_probe(struct snd_soc_codec *codec)
 				CS35L35_SP_DRV_MASK,
 				cs35l35->pdata.sp_drv_str <<
 				CS35L35_SP_DRV_SHIFT);
+	if (cs35l35->pdata.sp_drv_unused)
+		regmap_update_bits(cs35l35->regmap, CS35L35_SP_FMT_CTL3,
+				   CS35L35_SP_I2S_DRV_MASK,
+				   cs35l35->pdata.sp_drv_unused <<
+				   CS35L35_SP_I2S_DRV_SHIFT);
 
 	if (classh->classh_algo_enable) {
 		if (classh->classh_bst_override)
@@ -1169,6 +1174,8 @@ static int cs35l35_handle_of_data(struct i2c_client *i2c_client,
 
 	if (of_property_read_u32(np, "cirrus,sp-drv-strength", &val32) >= 0)
 		pdata->sp_drv_str = val32;
+	if (of_property_read_u32(np, "cirrus,sp-drv-unused", &val32) >= 0)
+		pdata->sp_drv_unused = val32 | CS35L35_VALID_PDATA;
 
 	pdata->stereo = of_property_read_bool(np, "cirrus,stereo-config");
 
sound/soc/codecs/cs35l35.h +4 -0
index e27a7fef5fb1..c203081fc94c 100644
@@ -190,6 +190,10 @@
 #define CS35L35_AMP_GAIN_ZC_MASK	0x10
 #define CS35L35_AMP_GAIN_ZC_SHIFT	4
 
+/* CS35L35_SP_FMT_CTL3 */
+#define CS35L35_SP_I2S_DRV_MASK		0x03
+#define CS35L35_SP_I2S_DRV_SHIFT	0
+
 /* Class H Algorithm Control */
 #define CS35L35_CH_STEREO_MASK		0x40
 #define CS35L35_CH_STEREO_SHIFT		6
Signature · 6 lines
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#7 lore raw

PATCH 4/5 ASoC: cs35l35: Add local variable for dev in probe

In reply to Charles Keepax

Tidy up the code a little by adding a local variable for i2c_client->dev rather than referring to it explicitly everytime.

---
 sound/soc/codecs/cs35l35.c | 66 ++++++++++++++++++----------------------------
 1 file changed, 26 insertions(+), 40 deletions(-)
sound/soc/codecs/cs35l35.c +26 -40
index 5a9fe5a..99bcdb9 100644
@@ -1354,16 +1354,14 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 			      const struct i2c_device_id *id)
 {
 	struct cs35l35_private *cs35l35;
-	struct cs35l35_platform_data *pdata =
-		dev_get_platdata(&i2c_client->dev);
+	struct device *dev = &i2c_client->dev;
+	struct cs35l35_platform_data *pdata = dev_get_platdata(dev);
 	int i;
 	int ret;
 	unsigned int devid = 0;
 	unsigned int reg;
 
-	cs35l35 = devm_kzalloc(&i2c_client->dev,
-			       sizeof(struct cs35l35_private),
-			       GFP_KERNEL);
+	cs35l35 = devm_kzalloc(dev, sizeof(struct cs35l35_private), GFP_KERNEL);
 	if (!cs35l35)
 		return -ENOMEM;
 
@@ -1371,7 +1369,7 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	cs35l35->regmap = devm_regmap_init_i2c(i2c_client, &cs35l35_regmap);
 	if (IS_ERR(cs35l35->regmap)) {
 		ret = PTR_ERR(cs35l35->regmap);
-		dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);
+		dev_err(dev, "regmap_init() failed: %d\n", ret);
 		goto err;
 	}
 
@@ -1379,22 +1377,18 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 		cs35l35->supplies[i].supply = cs35l35_supplies[i];
 		cs35l35->num_supplies = ARRAY_SIZE(cs35l35_supplies);
 
-	ret = devm_regulator_bulk_get(&i2c_client->dev,
-			cs35l35->num_supplies,
-			cs35l35->supplies);
+	ret = devm_regulator_bulk_get(dev, cs35l35->num_supplies,
+				      cs35l35->supplies);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to request core supplies: %d\n",
-			ret);
+		dev_err(dev, "Failed to request core supplies: %d\n", ret);
 		return ret;
 	}
 
 	if (pdata) {
 		cs35l35->pdata = *pdata;
 	} else {
-		pdata = devm_kzalloc(&i2c_client->dev,
-				     sizeof(struct cs35l35_platform_data),
-				GFP_KERNEL);
+		pdata = devm_kzalloc(dev, sizeof(struct cs35l35_platform_data),
+				     GFP_KERNEL);
 		if (!pdata)
 			return -ENOMEM;
 		if (i2c_client->dev.of_node) {
@@ -1409,24 +1403,21 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	ret = regulator_bulk_enable(cs35l35->num_supplies,
 					cs35l35->supplies);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to enable core supplies: %d\n",
-			ret);
+		dev_err(dev, "Failed to enable core supplies: %d\n", ret);
 		return ret;
 	}
 
 	/* returning NULL can be valid if in stereo mode */
-	cs35l35->reset_gpio = devm_gpiod_get_optional(&i2c_client->dev,
-		"reset", GPIOD_OUT_LOW);
+	cs35l35->reset_gpio = devm_gpiod_get_optional(dev, "reset",
+						      GPIOD_OUT_LOW);
 	if (IS_ERR(cs35l35->reset_gpio)) {
 		ret = PTR_ERR(cs35l35->reset_gpio);
 		if (ret == -EBUSY) {
-			dev_info(&i2c_client->dev,
+			dev_info(dev,
 				 "Reset line busy, assuming shared reset\n");
 			cs35l35->reset_gpio = NULL;
 		} else {
-			dev_err(&i2c_client->dev,
-				"Failed to get reset GPIO: %d\n", ret);
+			dev_err(dev, "Failed to get reset GPIO: %d\n", ret);
 			goto err;
 		}
 	}
@@ -1435,11 +1426,11 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 
 	init_completion(&cs35l35->pdn_done);
 
-	ret = devm_request_threaded_irq(&i2c_client->dev, i2c_client->irq, NULL,
-			cs35l35_irq, IRQF_ONESHOT | IRQF_TRIGGER_LOW,
-			"cs35l35", cs35l35);
+	ret = devm_request_threaded_irq(dev, i2c_client->irq, NULL, cs35l35_irq,
+					IRQF_ONESHOT | IRQF_TRIGGER_LOW,
+					"cs35l35", cs35l35);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev, "Failed to request IRQ: %d\n", ret);
+		dev_err(dev, "Failed to request IRQ: %d\n", ret);
 		goto err;
 	}
 	/* initialize codec */
@@ -1452,8 +1443,7 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	devid |= (reg & 0xF0) >> 4;
 
 	if (devid != CS35L35_CHIP_ID) {
-		dev_err(&i2c_client->dev,
-			"CS35L35 Device ID (%X). Expected ID %X\n",
+		dev_err(dev, "CS35L35 Device ID (%X). Expected ID %X\n",
 			devid, CS35L35_CHIP_ID);
 		ret = -ENODEV;
 		goto err;
@@ -1461,21 +1451,19 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 
 	ret = regmap_read(cs35l35->regmap, CS35L35_REV_ID, &reg);
 	if (ret < 0) {
-		dev_err(&i2c_client->dev, "Get Revision ID failed: %d\n", ret);
+		dev_err(dev, "Get Revision ID failed: %d\n", ret);
 		goto err;
 	}
 
 	ret = regmap_register_patch(cs35l35->regmap, cs35l35_errata_patch,
 				    ARRAY_SIZE(cs35l35_errata_patch));
 	if (ret < 0) {
-		dev_err(&i2c_client->dev, "Failed to apply errata patch: %d\n",
-			ret);
+		dev_err(dev, "Failed to apply errata patch: %d\n", ret);
 		goto err;
 	}
 
-	dev_info(&i2c_client->dev,
-		 "Cirrus Logic CS35L35 (%x), Revision: %02X\n", devid,
-		ret & 0xFF);
+	dev_info(dev, "Cirrus Logic CS35L35 (%x), Revision: %02X\n",
+		 devid, ret & 0xFF);
 
 	/* Set the INT Masks for critical errors */
 	regmap_write(cs35l35->regmap, CS35L35_INT_MASK_1,
@@ -1507,12 +1495,10 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
 		CS35L35_AMP_MUTE_MASK, 1 << CS35L35_AMP_MUTE_SHIFT);
 
-	ret =  snd_soc_register_codec(&i2c_client->dev,
-			&soc_codec_dev_cs35l35, cs35l35_dai,
-			ARRAY_SIZE(cs35l35_dai));
+	ret =  snd_soc_register_codec(dev, &soc_codec_dev_cs35l35, cs35l35_dai,
+				      ARRAY_SIZE(cs35l35_dai));
 	if (ret < 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to register codec: %d\n", ret);
+		dev_err(dev, "Failed to register codec: %d\n", ret);
 		goto err;
 	}
 
Signature · 1 line
2.1.4

A message that is not in the archive (sent off-list or not yet received): 1488991371-22513-4-git-send-email-ckeepax-yzvPICuk2AATkU/[email protected]

#9 lore raw

Applied "ASoC: cs35l35: Add local variable for dev in probe" to the asoc tree

The patch

ASoC: cs35l35: Add local variable for dev in probe

has been applied to the asoc tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git

All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying to this mail.

Thanks,
Mark

Quoted 1 line

From 1f758cd9da61a1ae2202405746d259ba640d1e8a Mon Sep 17 00:00:00 2001

From: Charles Keepax <ckeepax-yzvPICuk2AATkU/[email protected]>
Date: Wed, 8 Mar 2017 16:42:50 +0000
Subject: [PATCH] ASoC: cs35l35: Add local variable for dev in probe

Tidy up the code a little by adding a local variable for i2c_client->dev rather than referring to it explicitly everytime.

---
 sound/soc/codecs/cs35l35.c | 66 ++++++++++++++++++----------------------------
 1 file changed, 26 insertions(+), 40 deletions(-)
sound/soc/codecs/cs35l35.c +26 -40
index 5a9fe5addb86..99bcdb962359 100644
@@ -1354,16 +1354,14 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 			      const struct i2c_device_id *id)
 {
 	struct cs35l35_private *cs35l35;
-	struct cs35l35_platform_data *pdata =
-		dev_get_platdata(&i2c_client->dev);
+	struct device *dev = &i2c_client->dev;
+	struct cs35l35_platform_data *pdata = dev_get_platdata(dev);
 	int i;
 	int ret;
 	unsigned int devid = 0;
 	unsigned int reg;
 
-	cs35l35 = devm_kzalloc(&i2c_client->dev,
-			       sizeof(struct cs35l35_private),
-			       GFP_KERNEL);
+	cs35l35 = devm_kzalloc(dev, sizeof(struct cs35l35_private), GFP_KERNEL);
 	if (!cs35l35)
 		return -ENOMEM;
 
@@ -1371,7 +1369,7 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	cs35l35->regmap = devm_regmap_init_i2c(i2c_client, &cs35l35_regmap);
 	if (IS_ERR(cs35l35->regmap)) {
 		ret = PTR_ERR(cs35l35->regmap);
-		dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);
+		dev_err(dev, "regmap_init() failed: %d\n", ret);
 		goto err;
 	}
 
@@ -1379,22 +1377,18 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 		cs35l35->supplies[i].supply = cs35l35_supplies[i];
 		cs35l35->num_supplies = ARRAY_SIZE(cs35l35_supplies);
 
-	ret = devm_regulator_bulk_get(&i2c_client->dev,
-			cs35l35->num_supplies,
-			cs35l35->supplies);
+	ret = devm_regulator_bulk_get(dev, cs35l35->num_supplies,
+				      cs35l35->supplies);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to request core supplies: %d\n",
-			ret);
+		dev_err(dev, "Failed to request core supplies: %d\n", ret);
 		return ret;
 	}
 
 	if (pdata) {
 		cs35l35->pdata = *pdata;
 	} else {
-		pdata = devm_kzalloc(&i2c_client->dev,
-				     sizeof(struct cs35l35_platform_data),
-				GFP_KERNEL);
+		pdata = devm_kzalloc(dev, sizeof(struct cs35l35_platform_data),
+				     GFP_KERNEL);
 		if (!pdata)
 			return -ENOMEM;
 		if (i2c_client->dev.of_node) {
@@ -1409,24 +1403,21 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	ret = regulator_bulk_enable(cs35l35->num_supplies,
 					cs35l35->supplies);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to enable core supplies: %d\n",
-			ret);
+		dev_err(dev, "Failed to enable core supplies: %d\n", ret);
 		return ret;
 	}
 
 	/* returning NULL can be valid if in stereo mode */
-	cs35l35->reset_gpio = devm_gpiod_get_optional(&i2c_client->dev,
-		"reset", GPIOD_OUT_LOW);
+	cs35l35->reset_gpio = devm_gpiod_get_optional(dev, "reset",
+						      GPIOD_OUT_LOW);
 	if (IS_ERR(cs35l35->reset_gpio)) {
 		ret = PTR_ERR(cs35l35->reset_gpio);
 		if (ret == -EBUSY) {
-			dev_info(&i2c_client->dev,
+			dev_info(dev,
 				 "Reset line busy, assuming shared reset\n");
 			cs35l35->reset_gpio = NULL;
 		} else {
-			dev_err(&i2c_client->dev,
-				"Failed to get reset GPIO: %d\n", ret);
+			dev_err(dev, "Failed to get reset GPIO: %d\n", ret);
 			goto err;
 		}
 	}
@@ -1435,11 +1426,11 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 
 	init_completion(&cs35l35->pdn_done);
 
-	ret = devm_request_threaded_irq(&i2c_client->dev, i2c_client->irq, NULL,
-			cs35l35_irq, IRQF_ONESHOT | IRQF_TRIGGER_LOW,
-			"cs35l35", cs35l35);
+	ret = devm_request_threaded_irq(dev, i2c_client->irq, NULL, cs35l35_irq,
+					IRQF_ONESHOT | IRQF_TRIGGER_LOW,
+					"cs35l35", cs35l35);
 	if (ret != 0) {
-		dev_err(&i2c_client->dev, "Failed to request IRQ: %d\n", ret);
+		dev_err(dev, "Failed to request IRQ: %d\n", ret);
 		goto err;
 	}
 	/* initialize codec */
@@ -1452,8 +1443,7 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	devid |= (reg & 0xF0) >> 4;
 
 	if (devid != CS35L35_CHIP_ID) {
-		dev_err(&i2c_client->dev,
-			"CS35L35 Device ID (%X). Expected ID %X\n",
+		dev_err(dev, "CS35L35 Device ID (%X). Expected ID %X\n",
 			devid, CS35L35_CHIP_ID);
 		ret = -ENODEV;
 		goto err;
@@ -1461,21 +1451,19 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 
 	ret = regmap_read(cs35l35->regmap, CS35L35_REV_ID, &reg);
 	if (ret < 0) {
-		dev_err(&i2c_client->dev, "Get Revision ID failed: %d\n", ret);
+		dev_err(dev, "Get Revision ID failed: %d\n", ret);
 		goto err;
 	}
 
 	ret = regmap_register_patch(cs35l35->regmap, cs35l35_errata_patch,
 				    ARRAY_SIZE(cs35l35_errata_patch));
 	if (ret < 0) {
-		dev_err(&i2c_client->dev, "Failed to apply errata patch: %d\n",
-			ret);
+		dev_err(dev, "Failed to apply errata patch: %d\n", ret);
 		goto err;
 	}
 
-	dev_info(&i2c_client->dev,
-		 "Cirrus Logic CS35L35 (%x), Revision: %02X\n", devid,
-		ret & 0xFF);
+	dev_info(dev, "Cirrus Logic CS35L35 (%x), Revision: %02X\n",
+		 devid, ret & 0xFF);
 
 	/* Set the INT Masks for critical errors */
 	regmap_write(cs35l35->regmap, CS35L35_INT_MASK_1,
@@ -1507,12 +1495,10 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
 		CS35L35_AMP_MUTE_MASK, 1 << CS35L35_AMP_MUTE_SHIFT);
 
-	ret =  snd_soc_register_codec(&i2c_client->dev,
-			&soc_codec_dev_cs35l35, cs35l35_dai,
-			ARRAY_SIZE(cs35l35_dai));
+	ret =  snd_soc_register_codec(dev, &soc_codec_dev_cs35l35, cs35l35_dai,
+				      ARRAY_SIZE(cs35l35_dai));
 	if (ret < 0) {
-		dev_err(&i2c_client->dev,
-			"Failed to register codec: %d\n", ret);
+		dev_err(dev, "Failed to register codec: %d\n", ret);
 		goto err;
 	}
 
Signature · 6 lines
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#10 lore raw

PATCH 5/5 ASoC: cs35l35: Add IRQF_SHARED to IRQ flags

In reply to Charles Keepax

As it is quite common to use a stereo pair of amps but share the IRQ line between them both add the IRQF_SHARED flag whilst requesting cs35l35's IRQ.

---
 sound/soc/codecs/cs35l35.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/cs35l35.c +2 -2
index 99bcdb9..7c4d74e 100644
@@ -1427,8 +1427,8 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	init_completion(&cs35l35->pdn_done);
 
 	ret = devm_request_threaded_irq(dev, i2c_client->irq, NULL, cs35l35_irq,
-					IRQF_ONESHOT | IRQF_TRIGGER_LOW,
-					"cs35l35", cs35l35);
+					IRQF_ONESHOT | IRQF_TRIGGER_LOW |
+					IRQF_SHARED, "cs35l35", cs35l35);
 	if (ret != 0) {
 		dev_err(dev, "Failed to request IRQ: %d\n", ret);
 		goto err;
Signature · 1 line
2.1.4

A message that is not in the archive (sent off-list or not yet received): 1488991371-22513-5-git-send-email-ckeepax-yzvPICuk2AATkU/[email protected]

#12 lore raw

Applied "ASoC: cs35l35: Add IRQF_SHARED to IRQ flags" to the asoc tree

The patch

ASoC: cs35l35: Add IRQF_SHARED to IRQ flags

has been applied to the asoc tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git

All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying to this mail.

Thanks,
Mark

Quoted 1 line

From bf5043d69c9bf33696f9151552175f1203f8c9d9 Mon Sep 17 00:00:00 2001

From: Charles Keepax <ckeepax-yzvPICuk2AATkU/[email protected]>
Date: Wed, 8 Mar 2017 16:42:51 +0000
Subject: [PATCH] ASoC: cs35l35: Add IRQF_SHARED to IRQ flags

As it is quite common to use a stereo pair of amps but share the IRQ line between them both add the IRQF_SHARED flag whilst requesting cs35l35's IRQ.

---
 sound/soc/codecs/cs35l35.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
sound/soc/codecs/cs35l35.c +2 -2
index 99bcdb962359..7c4d74ec32cb 100644
@@ -1427,8 +1427,8 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 	init_completion(&cs35l35->pdn_done);
 
 	ret = devm_request_threaded_irq(dev, i2c_client->irq, NULL, cs35l35_irq,
-					IRQF_ONESHOT | IRQF_TRIGGER_LOW,
-					"cs35l35", cs35l35);
+					IRQF_ONESHOT | IRQF_TRIGGER_LOW |
+					IRQF_SHARED, "cs35l35", cs35l35);
 	if (ret != 0) {
 		dev_err(dev, "Failed to request IRQ: %d\n", ret);
 		goto err;
Signature · 6 lines
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Acked-by on v1 1/5
#13 lore raw
In reply to Charles Keepax
Quoted 7 lines · On 3/8/17, 10:42 AM, "[email protected] on behalf of Charles…

A return statement is missing just before the error paths at the end of probe. This causes us to fall straight into the error path and disable the supplies and re-enable reset, as these are only controlled during probe this causes the part to no longer function.

---

For the series

A message that is not in the archive (sent off-list or not yet received): 1488991371-22513-1-git-send-email-ckeepax-yzvPICuk2AATkU/[email protected]

#15 lore raw

Applied "ASoC: cs35l35: Add missing return in probe" to the asoc tree

The patch

ASoC: cs35l35: Add missing return in probe

has been applied to the asoc tree at

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git

All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying to this mail.

Thanks,
Mark

Quoted 1 line

From 1bb06ada038548b4e2449159e80badf106bb779f Mon Sep 17 00:00:00 2001

From: Charles Keepax <ckeepax-yzvPICuk2AATkU/[email protected]>
Date: Wed, 8 Mar 2017 16:42:47 +0000
Subject: [PATCH] ASoC: cs35l35: Add missing return in probe

A return statement is missing just before the error paths at the end of probe. This causes us to fall straight into the error path and disable the supplies and re-enable reset, as these are only controlled during probe this causes the part to no longer function.

---
 sound/soc/codecs/cs35l35.c | 2 ++
 1 file changed, 2 insertions(+)
sound/soc/codecs/cs35l35.c +2 -0
index 260ed42c71e9..48b45dc904ea 100644
@@ -1509,6 +1509,8 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
 		goto err;
 	}
 
+	return 0;
+
 err:
 	regulator_bulk_disable(cs35l35->num_supplies,
 			       cs35l35->supplies);
Signature · 6 lines
2.11.0

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html