summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTracy Yi2018-12-12 20:56:26 -0600
committerTracy Yi2018-12-12 20:58:55 -0600
commit0d0c27c6fb3c9eeed754332d370cf9fb88b509bd (patch)
tree1bef57ad66ba061238bf8d54a6ba2f49d4ceb6bf
parent5e4ab14a84faabdb651dc9815f303deedac97a43 (diff)
downloadtas2770sw-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.c23
-rw-r--r--tas2770-regmap.c9
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;