diff options
| author | Brian Austin <brian.austin@cirrus.com> | 2013-10-25 11:01:14 -0400 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2013-10-25 11:37:58 -0400 |
| commit | 6dd17757927ba9d23c604fee6fe72b4755c7ea7f (patch) | |
| tree | de40e4d181b47784c4dd108fc569d5177d649443 | |
| parent | 31d141e3a666269a3b6fcccddb0351caf7454240 (diff) | |
ASoC: cs42l52: Add platform data for reset gpio
This patch adds platform data support for a reset GPIO.
Also uses reset_gpio to toggle reset of the CODEC
Signed-off-by: Brian Austin <brian.austin@cirrus.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
| -rw-r--r-- | include/sound/cs42l52.h | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/cs42l52.c | 21 |
2 files changed, 19 insertions, 4 deletions
diff --git a/include/sound/cs42l52.h b/include/sound/cs42l52.h index 4c68955f7330..7c2be4a51894 100644 --- a/include/sound/cs42l52.h +++ b/include/sound/cs42l52.h | |||
| @@ -31,6 +31,8 @@ struct cs42l52_platform_data { | |||
| 31 | /* Charge Pump Freq. Check datasheet Pg73 */ | 31 | /* Charge Pump Freq. Check datasheet Pg73 */ |
| 32 | unsigned int chgfreq; | 32 | unsigned int chgfreq; |
| 33 | 33 | ||
| 34 | /* Reset GPIO */ | ||
| 35 | unsigned int reset_gpio; | ||
| 34 | }; | 36 | }; |
| 35 | 37 | ||
| 36 | #endif /* __CS42L52_H */ | 38 | #endif /* __CS42L52_H */ |
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c index be2ba1b6fe4a..8367f3c571eb 100644 --- a/sound/soc/codecs/cs42l52.c +++ b/sound/soc/codecs/cs42l52.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
| 18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
| 19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
| 20 | #include <linux/gpio.h> | ||
| 20 | #include <linux/pm.h> | 21 | #include <linux/pm.h> |
| 21 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
| 22 | #include <linux/input.h> | 23 | #include <linux/input.h> |
| @@ -1205,6 +1206,7 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client, | |||
| 1205 | const struct i2c_device_id *id) | 1206 | const struct i2c_device_id *id) |
| 1206 | { | 1207 | { |
| 1207 | struct cs42l52_private *cs42l52; | 1208 | struct cs42l52_private *cs42l52; |
| 1209 | struct cs42l52_platform_data *pdata = dev_get_platdata(&i2c_client->dev); | ||
| 1208 | int ret; | 1210 | int ret; |
| 1209 | unsigned int devid = 0; | 1211 | unsigned int devid = 0; |
| 1210 | unsigned int reg; | 1212 | unsigned int reg; |
| @@ -1222,11 +1224,22 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client, | |||
| 1222 | return ret; | 1224 | return ret; |
| 1223 | } | 1225 | } |
| 1224 | 1226 | ||
| 1225 | i2c_set_clientdata(i2c_client, cs42l52); | 1227 | if (pdata) |
| 1228 | cs42l52->pdata = *pdata; | ||
| 1226 | 1229 | ||
| 1227 | if (dev_get_platdata(&i2c_client->dev)) | 1230 | if (cs42l52->pdata.reset_gpio) { |
| 1228 | memcpy(&cs42l52->pdata, dev_get_platdata(&i2c_client->dev), | 1231 | ret = gpio_request_one(cs42l52->pdata.reset_gpio, |
| 1229 | sizeof(cs42l52->pdata)); | 1232 | GPIOF_OUT_INIT_HIGH, "CS42L52 /RST"); |
| 1233 | if (ret < 0) { | ||
| 1234 | dev_err(&i2c_client->dev, "Failed to request /RST %d: %d\n", | ||
| 1235 | cs42l52->pdata.reset_gpio, ret); | ||
| 1236 | return ret; | ||
| 1237 | } | ||
| 1238 | gpio_set_value_cansleep(cs42l52->pdata.reset_gpio, 0); | ||
| 1239 | gpio_set_value_cansleep(cs42l52->pdata.reset_gpio, 1); | ||
| 1240 | } | ||
| 1241 | |||
| 1242 | i2c_set_clientdata(i2c_client, cs42l52); | ||
| 1230 | 1243 | ||
| 1231 | ret = regmap_register_patch(cs42l52->regmap, cs42l52_threshold_patch, | 1244 | ret = regmap_register_patch(cs42l52->regmap, cs42l52_threshold_patch, |
| 1232 | ARRAY_SIZE(cs42l52_threshold_patch)); | 1245 | ARRAY_SIZE(cs42l52_threshold_patch)); |
