diff options
author | Tracy Yi | 2018-12-12 20:56:26 -0600 |
---|---|---|
committer | Tracy Yi | 2018-12-12 20:58:55 -0600 |
commit | 0d0c27c6fb3c9eeed754332d370cf9fb88b509bd (patch) | |
tree | 1bef57ad66ba061238bf8d54a6ba2f49d4ceb6bf | |
parent | 5e4ab14a84faabdb651dc9815f303deedac97a43 (diff) | |
download | tas2770sw-android-0d0c27c6fb3c9eeed754332d370cf9fb88b509bd.tar.gz tas2770sw-android-0d0c27c6fb3c9eeed754332d370cf9fb88b509bd.tar.xz tas2770sw-android-0d0c27c6fb3c9eeed754332d370cf9fb88b509bd.zip |
Add IRQ enable
Signed-off-by: Tracy Yi <tracy-yi@ti.com>
-rw-r--r-- | tas2770-codec.c | 23 | ||||
-rw-r--r-- | tas2770-regmap.c | 9 |
2 files changed, 20 insertions, 12 deletions
diff --git a/tas2770-codec.c b/tas2770-codec.c index 1e4e852..295e3bc 100644 --- a/tas2770-codec.c +++ b/tas2770-codec.c | |||
@@ -108,6 +108,7 @@ static int tas2770_codec_suspend(struct snd_soc_codec *codec) | |||
108 | mutex_lock(&pTAS2770->codec_lock); | 108 | mutex_lock(&pTAS2770->codec_lock); |
109 | 109 | ||
110 | dev_dbg(pTAS2770->dev, "%s\n", __func__); | 110 | dev_dbg(pTAS2770->dev, "%s\n", __func__); |
111 | pTAS2770->runtime_suspend(pTAS2770); | ||
111 | 112 | ||
112 | mutex_unlock(&pTAS2770->codec_lock); | 113 | mutex_unlock(&pTAS2770->codec_lock); |
113 | return ret; | 114 | return ret; |
@@ -121,6 +122,7 @@ static int tas2770_codec_resume(struct snd_soc_codec *codec) | |||
121 | mutex_lock(&pTAS2770->codec_lock); | 122 | mutex_lock(&pTAS2770->codec_lock); |
122 | 123 | ||
123 | dev_dbg(pTAS2770->dev, "%s\n", __func__); | 124 | dev_dbg(pTAS2770->dev, "%s\n", __func__); |
125 | pTAS2770->runtime_resume(pTAS2770); | ||
124 | 126 | ||
125 | mutex_unlock(&pTAS2770->codec_lock); | 127 | mutex_unlock(&pTAS2770->codec_lock); |
126 | return ret; | 128 | return ret; |
@@ -146,18 +148,23 @@ static int tas2770_set_power_state(struct tas2770_priv *pTAS2770, int state) | |||
146 | snd_soc_update_bits(codec, TAS2770_PowerControl, | 148 | snd_soc_update_bits(codec, TAS2770_PowerControl, |
147 | TAS2770_PowerControl_OperationalMode10_Mask, | 149 | TAS2770_PowerControl_OperationalMode10_Mask, |
148 | TAS2770_PowerControl_OperationalMode10_Active); | 150 | TAS2770_PowerControl_OperationalMode10_Active); |
151 | pTAS2770->mnPowerState = TAS2770_POWER_ACTIVE; | ||
152 | pTAS2770->enableIRQ(pTAS2770, true); | ||
149 | break; | 153 | break; |
150 | 154 | ||
151 | case TAS2770_POWER_MUTE: | 155 | case TAS2770_POWER_MUTE: |
152 | snd_soc_update_bits(codec, TAS2770_PowerControl, | 156 | snd_soc_update_bits(codec, TAS2770_PowerControl, |
153 | TAS2770_PowerControl_OperationalMode10_Mask, | 157 | TAS2770_PowerControl_OperationalMode10_Mask, |
154 | TAS2770_PowerControl_OperationalMode10_Mute); | 158 | TAS2770_PowerControl_OperationalMode10_Mute); |
159 | pTAS2770->mnPowerState = TAS2770_POWER_MUTE; | ||
155 | break; | 160 | break; |
156 | 161 | ||
157 | case TAS2770_POWER_SHUTDOWN: | 162 | case TAS2770_POWER_SHUTDOWN: |
158 | snd_soc_update_bits(codec, TAS2770_PowerControl, | 163 | snd_soc_update_bits(codec, TAS2770_PowerControl, |
159 | TAS2770_PowerControl_OperationalMode10_Mask, | 164 | TAS2770_PowerControl_OperationalMode10_Mask, |
160 | TAS2770_PowerControl_OperationalMode10_Shutdown); | 165 | TAS2770_PowerControl_OperationalMode10_Shutdown); |
166 | pTAS2770->enableIRQ(pTAS2770, false); | ||
167 | pTAS2770->mnPowerState = TAS2770_POWER_SHUTDOWN; | ||
161 | break; | 168 | break; |
162 | 169 | ||
163 | default: | 170 | default: |
@@ -248,26 +255,26 @@ static int tas2770_set_bitwidth(struct tas2770_priv *pTAS2770, int bitwidth) | |||
248 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, | 255 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, |
249 | TAS2770_TDMConfigurationReg2_RXWLEN32_16Bits); | 256 | TAS2770_TDMConfigurationReg2_RXWLEN32_16Bits); |
250 | /* If machine driver did not call set slot width */ | 257 | /* If machine driver did not call set slot width */ |
251 | if (pTAS2770->mnSlot_width == 0) | 258 | if (pTAS2770->mnSlot_width == 0) |
252 | tas2770_set_slot(pTAS2770->codec, 16); | 259 | tas2770_set_slot(pTAS2770->codec, 16); |
253 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 2; | 260 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 2; |
254 | break; | 261 | break; |
255 | case SNDRV_PCM_FORMAT_S24_LE: | 262 | case SNDRV_PCM_FORMAT_S24_LE: |
256 | snd_soc_update_bits(pTAS2770->codec, | 263 | snd_soc_update_bits(pTAS2770->codec, |
257 | TAS2770_TDMConfigurationReg2, | 264 | TAS2770_TDMConfigurationReg2, |
258 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, | 265 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, |
259 | TAS2770_TDMConfigurationReg2_RXWLEN32_24Bits); | 266 | TAS2770_TDMConfigurationReg2_RXWLEN32_24Bits); |
260 | if (pTAS2770->mnSlot_width == 0) | 267 | if (pTAS2770->mnSlot_width == 0) |
261 | tas2770_set_slot(pTAS2770->codec, 32); | 268 | tas2770_set_slot(pTAS2770->codec, 32); |
262 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 4; | 269 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 4; |
263 | break; | 270 | break; |
264 | case SNDRV_PCM_FORMAT_S32_LE: | 271 | case SNDRV_PCM_FORMAT_S32_LE: |
265 | snd_soc_update_bits(pTAS2770->codec, | 272 | snd_soc_update_bits(pTAS2770->codec, |
266 | TAS2770_TDMConfigurationReg2, | 273 | TAS2770_TDMConfigurationReg2, |
267 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, | 274 | TAS2770_TDMConfigurationReg2_RXWLEN32_Mask, |
268 | TAS2770_TDMConfigurationReg2_RXWLEN32_32Bits); | 275 | TAS2770_TDMConfigurationReg2_RXWLEN32_32Bits); |
269 | if (pTAS2770->mnSlot_width == 0) | 276 | if (pTAS2770->mnSlot_width == 0) |
270 | tas2770_set_slot(pTAS2770->codec, 32); | 277 | tas2770_set_slot(pTAS2770->codec, 32); |
271 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 4; | 278 | pTAS2770->mnVmon_slot_no = pTAS2770->mnImon_slot_no + 4; |
272 | break; | 279 | break; |
273 | 280 | ||
diff --git a/tas2770-regmap.c b/tas2770-regmap.c index 196f163..c98cdc7 100644 --- a/tas2770-regmap.c +++ b/tas2770-regmap.c | |||
@@ -172,7 +172,7 @@ static void irq_work_routine(struct work_struct *work) | |||
172 | else | 172 | else |
173 | goto reload; | 173 | goto reload; |
174 | 174 | ||
175 | dev_dbg(pTAS2770->dev, "IRQ status : 0x%x, 0x%x\n", | 175 | dev_info(pTAS2770->dev, "IRQ status : 0x%x, 0x%x\n", |
176 | nDevInt1Status, nDevInt2Status); | 176 | nDevInt1Status, nDevInt2Status); |
177 | 177 | ||
178 | if (((nDevInt1Status & 0x3) != 0) || ((nDevInt2Status & 0x0f) != 0)) { | 178 | if (((nDevInt1Status & 0x3) != 0) || ((nDevInt2Status & 0x0f) != 0)) { |
@@ -409,13 +409,14 @@ static int tas2770_i2c_probe(struct i2c_client *client, | |||
409 | sizeof(struct tas2770_priv), GFP_KERNEL); | 409 | sizeof(struct tas2770_priv), GFP_KERNEL); |
410 | if (pTAS2770 == NULL) { | 410 | if (pTAS2770 == NULL) { |
411 | nResult = -ENOMEM; | 411 | nResult = -ENOMEM; |
412 | dev_info(&client->dev, "Failed to allocate i2c device\n"); | ||
412 | goto end; | 413 | goto end; |
413 | } | 414 | } |
414 | 415 | ||
415 | pTAS2770->dev = &client->dev; | 416 | pTAS2770->dev = &client->dev; |
416 | i2c_set_clientdata(client, pTAS2770); | 417 | i2c_set_clientdata(client, pTAS2770); |
417 | dev_set_drvdata(&client->dev, pTAS2770); | 418 | dev_set_drvdata(&client->dev, pTAS2770); |
418 | pTAS2770->mnPowerState = TAS2770_POWER_STATE; | 419 | pTAS2770->mnPowerState = TAS2770_POWER_SHUTDOWN; |
419 | 420 | ||
420 | pTAS2770->regmap = devm_regmap_init_i2c(client, &tas2770_i2c_regmap); | 421 | pTAS2770->regmap = devm_regmap_init_i2c(client, &tas2770_i2c_regmap); |
421 | if (IS_ERR(pTAS2770->regmap)) { | 422 | if (IS_ERR(pTAS2770->regmap)) { |
@@ -447,7 +448,8 @@ static int tas2770_i2c_probe(struct i2c_client *client, | |||
447 | } | 448 | } |
448 | gpio_direction_input(pTAS2770->mnIRQGPIO); | 449 | gpio_direction_input(pTAS2770->mnIRQGPIO); |
449 | pTAS2770->mnIRQ = gpio_to_irq(pTAS2770->mnIRQGPIO); | 450 | pTAS2770->mnIRQ = gpio_to_irq(pTAS2770->mnIRQGPIO); |
450 | dev_dbg(pTAS2770->dev, "irq = %d\n", pTAS2770->mnIRQ); | 451 | dev_info(pTAS2770->dev, "irq = %d\n", pTAS2770->mnIRQ); |
452 | INIT_DELAYED_WORK(&pTAS2770->irq_work, irq_work_routine); | ||
451 | nResult = request_threaded_irq(pTAS2770->mnIRQ, | 453 | nResult = request_threaded_irq(pTAS2770->mnIRQ, |
452 | tas2770_irq_handler, NULL, | 454 | tas2770_irq_handler, NULL, |
453 | IRQF_TRIGGER_LOW | IRQF_ONESHOT, | 455 | IRQF_TRIGGER_LOW | IRQF_ONESHOT, |
@@ -458,7 +460,6 @@ static int tas2770_i2c_probe(struct i2c_client *client, | |||
458 | goto free_gpio; | 460 | goto free_gpio; |
459 | } | 461 | } |
460 | disable_irq_nosync(pTAS2770->mnIRQ); | 462 | disable_irq_nosync(pTAS2770->mnIRQ); |
461 | INIT_DELAYED_WORK(&pTAS2770->irq_work, irq_work_routine); | ||
462 | } | 463 | } |
463 | 464 | ||
464 | pTAS2770->hw_reset = tas2770_hw_reset; | 465 | pTAS2770->hw_reset = tas2770_hw_reset; |