diff options
| -rw-r--r-- | drivers/extcon/extcon-arizona.c | 19 | ||||
| -rw-r--r-- | include/linux/mfd/arizona/core.h | 4 | ||||
| -rw-r--r-- | include/linux/mfd/arizona/registers.h | 28 |
3 files changed, 50 insertions, 1 deletions
diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index 635b7078ce5e..3ef3bee7d1e6 100644 --- a/drivers/extcon/extcon-arizona.c +++ b/drivers/extcon/extcon-arizona.c | |||
| @@ -45,6 +45,7 @@ struct arizona_extcon_info { | |||
| 45 | int micd_num_modes; | 45 | int micd_num_modes; |
| 46 | 46 | ||
| 47 | bool micd_reva; | 47 | bool micd_reva; |
| 48 | bool micd_clamp; | ||
| 48 | 49 | ||
| 49 | bool mic; | 50 | bool mic; |
| 50 | bool detecting; | 51 | bool detecting; |
| @@ -375,6 +376,7 @@ static int arizona_extcon_probe(struct platform_device *pdev) | |||
| 375 | info->micd_reva = true; | 376 | info->micd_reva = true; |
| 376 | break; | 377 | break; |
| 377 | default: | 378 | default: |
| 379 | info->micd_clamp = true; | ||
| 378 | break; | 380 | break; |
| 379 | } | 381 | } |
| 380 | break; | 382 | break; |
| @@ -423,6 +425,19 @@ static int arizona_extcon_probe(struct platform_device *pdev) | |||
| 423 | arizona->pdata.micd_bias_start_time | 425 | arizona->pdata.micd_bias_start_time |
| 424 | << ARIZONA_MICD_BIAS_STARTTIME_SHIFT); | 426 | << ARIZONA_MICD_BIAS_STARTTIME_SHIFT); |
| 425 | 427 | ||
| 428 | /* | ||
| 429 | * If we have a clamp use it. | ||
| 430 | */ | ||
| 431 | if (info->micd_clamp) { | ||
| 432 | regmap_update_bits(arizona->regmap, | ||
| 433 | ARIZONA_MICD_CLAMP_CONTROL, | ||
| 434 | ARIZONA_MICD_CLAMP_MODE_MASK, 4); | ||
| 435 | regmap_update_bits(arizona->regmap, | ||
| 436 | ARIZONA_JACK_DETECT_DEBOUNCE, | ||
| 437 | ARIZONA_MICD_CLAMP_DB, | ||
| 438 | ARIZONA_MICD_CLAMP_DB); | ||
| 439 | } | ||
| 440 | |||
| 426 | arizona_extcon_set_mode(info, 0); | 441 | arizona_extcon_set_mode(info, 0); |
| 427 | 442 | ||
| 428 | info->input = devm_input_allocate_device(&pdev->dev); | 443 | info->input = devm_input_allocate_device(&pdev->dev); |
| @@ -529,6 +544,10 @@ static int arizona_extcon_remove(struct platform_device *pdev) | |||
| 529 | 544 | ||
| 530 | pm_runtime_disable(&pdev->dev); | 545 | pm_runtime_disable(&pdev->dev); |
| 531 | 546 | ||
| 547 | regmap_update_bits(arizona->regmap, | ||
| 548 | ARIZONA_MICD_CLAMP_CONTROL, | ||
| 549 | ARIZONA_MICD_CLAMP_MODE_MASK, 0); | ||
| 550 | |||
| 532 | arizona_set_irq_wake(arizona, ARIZONA_IRQ_JD_RISE, 0); | 551 | arizona_set_irq_wake(arizona, ARIZONA_IRQ_JD_RISE, 0); |
| 533 | arizona_set_irq_wake(arizona, ARIZONA_IRQ_JD_FALL, 0); | 552 | arizona_set_irq_wake(arizona, ARIZONA_IRQ_JD_FALL, 0); |
| 534 | arizona_free_irq(arizona, ARIZONA_IRQ_MICDET, info); | 553 | arizona_free_irq(arizona, ARIZONA_IRQ_MICDET, info); |
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index a580363a7d29..a710255528d7 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
| @@ -75,8 +75,10 @@ enum arizona_type { | |||
| 75 | #define ARIZONA_IRQ_DCS_HP_DONE 47 | 75 | #define ARIZONA_IRQ_DCS_HP_DONE 47 |
| 76 | #define ARIZONA_IRQ_FLL2_CLOCK_OK 48 | 76 | #define ARIZONA_IRQ_FLL2_CLOCK_OK 48 |
| 77 | #define ARIZONA_IRQ_FLL1_CLOCK_OK 49 | 77 | #define ARIZONA_IRQ_FLL1_CLOCK_OK 49 |
| 78 | #define ARIZONA_IRQ_MICD_CLAMP_RISE 50 | ||
| 79 | #define ARIZONA_IRQ_MICD_CLAMP_FALL 51 | ||
| 78 | 80 | ||
| 79 | #define ARIZONA_NUM_IRQ 50 | 81 | #define ARIZONA_NUM_IRQ 52 |
| 80 | 82 | ||
| 81 | struct snd_soc_dapm_context; | 83 | struct snd_soc_dapm_context; |
| 82 | 84 | ||
diff --git a/include/linux/mfd/arizona/registers.h b/include/linux/mfd/arizona/registers.h index 1f6fe31a4d5c..f3211f06cec6 100644 --- a/include/linux/mfd/arizona/registers.h +++ b/include/linux/mfd/arizona/registers.h | |||
| @@ -119,6 +119,7 @@ | |||
| 119 | #define ARIZONA_ACCESSORY_DETECT_MODE_1 0x293 | 119 | #define ARIZONA_ACCESSORY_DETECT_MODE_1 0x293 |
| 120 | #define ARIZONA_HEADPHONE_DETECT_1 0x29B | 120 | #define ARIZONA_HEADPHONE_DETECT_1 0x29B |
| 121 | #define ARIZONA_HEADPHONE_DETECT_2 0x29C | 121 | #define ARIZONA_HEADPHONE_DETECT_2 0x29C |
| 122 | #define ARIZONA_MICD_CLAMP_CONTROL 0x2A2 | ||
| 122 | #define ARIZONA_MIC_DETECT_1 0x2A3 | 123 | #define ARIZONA_MIC_DETECT_1 0x2A3 |
| 123 | #define ARIZONA_MIC_DETECT_2 0x2A4 | 124 | #define ARIZONA_MIC_DETECT_2 0x2A4 |
| 124 | #define ARIZONA_MIC_DETECT_3 0x2A5 | 125 | #define ARIZONA_MIC_DETECT_3 0x2A5 |
| @@ -2070,6 +2071,13 @@ | |||
| 2070 | #define ARIZONA_HP_LVL_WIDTH 7 /* HP_LVL - [6:0] */ | 2071 | #define ARIZONA_HP_LVL_WIDTH 7 /* HP_LVL - [6:0] */ |
| 2071 | 2072 | ||
| 2072 | /* | 2073 | /* |
| 2074 | * R674 (0x2A2) - MICD clamp control | ||
| 2075 | */ | ||
| 2076 | #define ARIZONA_MICD_CLAMP_MODE_MASK 0x000F /* MICD_CLAMP_MODE - [3:0] */ | ||
| 2077 | #define ARIZONA_MICD_CLAMP_MODE_SHIFT 0 /* MICD_CLAMP_MODE - [3:0] */ | ||
| 2078 | #define ARIZONA_MICD_CLAMP_MODE_WIDTH 4 /* MICD_CLAMP_MODE - [3:0] */ | ||
| 2079 | |||
| 2080 | /* | ||
| 2073 | * R675 (0x2A3) - Mic Detect 1 | 2081 | * R675 (0x2A3) - Mic Detect 1 |
| 2074 | */ | 2082 | */ |
| 2075 | #define ARIZONA_MICD_BIAS_STARTTIME_MASK 0xF000 /* MICD_BIAS_STARTTIME - [15:12] */ | 2083 | #define ARIZONA_MICD_BIAS_STARTTIME_MASK 0xF000 /* MICD_BIAS_STARTTIME - [15:12] */ |
| @@ -5267,6 +5275,12 @@ | |||
| 5267 | /* | 5275 | /* |
| 5268 | * R3409 (0xD51) - AOD IRQ1 | 5276 | * R3409 (0xD51) - AOD IRQ1 |
| 5269 | */ | 5277 | */ |
| 5278 | #define ARIZONA_MICD_CLAMP_FALL_EINT1 0x0080 /* MICD_CLAMP_FALL_EINT1 */ | ||
| 5279 | #define ARIZONA_MICD_CLAMP_FALL_EINT1_MASK 0x0080 /* MICD_CLAMP_FALL_EINT1 */ | ||
| 5280 | #define ARIZONA_MICD_CLAMP_FALL_EINT1_SHIFT 7 /* MICD_CLAMP_FALL_EINT1 */ | ||
| 5281 | #define ARIZONA_MICD_CLAMP_RISE_EINT1 0x0040 /* MICD_CLAMP_RISE_EINT1 */ | ||
| 5282 | #define ARIZONA_MICD_CLAMP_RISE_EINT1_MASK 0x0040 /* MICD_CLAMP_RISE_EINT1 */ | ||
| 5283 | #define ARIZONA_MICD_CLAMP_RISE_EINT1_SHIFT 6 /* MICD_CLAMP_RISE_EINT1 */ | ||
| 5270 | #define ARIZONA_GP5_FALL_EINT1 0x0020 /* GP5_FALL_EINT1 */ | 5284 | #define ARIZONA_GP5_FALL_EINT1 0x0020 /* GP5_FALL_EINT1 */ |
| 5271 | #define ARIZONA_GP5_FALL_EINT1_MASK 0x0020 /* GP5_FALL_EINT1 */ | 5285 | #define ARIZONA_GP5_FALL_EINT1_MASK 0x0020 /* GP5_FALL_EINT1 */ |
| 5272 | #define ARIZONA_GP5_FALL_EINT1_SHIFT 5 /* GP5_FALL_EINT1 */ | 5286 | #define ARIZONA_GP5_FALL_EINT1_SHIFT 5 /* GP5_FALL_EINT1 */ |
| @@ -5295,6 +5309,12 @@ | |||
| 5295 | /* | 5309 | /* |
| 5296 | * R3410 (0xD52) - AOD IRQ2 | 5310 | * R3410 (0xD52) - AOD IRQ2 |
| 5297 | */ | 5311 | */ |
| 5312 | #define ARIZONA_MICD_CLAMP_FALL_EINT2 0x0080 /* MICD_CLAMP_FALL_EINT2 */ | ||
| 5313 | #define ARIZONA_MICD_CLAMP_FALL_EINT2_MASK 0x0080 /* MICD_CLAMP_FALL_EINT2 */ | ||
| 5314 | #define ARIZONA_MICD_CLAMP_FALL_EINT2_SHIFT 7 /* MICD_CLAMP_FALL_EINT2 */ | ||
| 5315 | #define ARIZONA_MICD_CLAMP_RISE_EINT2 0x0040 /* MICD_CLAMP_RISE_EINT2 */ | ||
| 5316 | #define ARIZONA_MICD_CLAMP_RISE_EINT2_MASK 0x0040 /* MICD_CLAMP_RISE_EINT2 */ | ||
| 5317 | #define ARIZONA_MICD_CLAMP_RISE_EINT2_SHIFT 6 /* MICD_CLAMP_RISE_EINT2 */ | ||
| 5298 | #define ARIZONA_GP5_FALL_EINT2 0x0020 /* GP5_FALL_EINT2 */ | 5318 | #define ARIZONA_GP5_FALL_EINT2 0x0020 /* GP5_FALL_EINT2 */ |
| 5299 | #define ARIZONA_GP5_FALL_EINT2_MASK 0x0020 /* GP5_FALL_EINT2 */ | 5319 | #define ARIZONA_GP5_FALL_EINT2_MASK 0x0020 /* GP5_FALL_EINT2 */ |
| 5300 | #define ARIZONA_GP5_FALL_EINT2_SHIFT 5 /* GP5_FALL_EINT2 */ | 5320 | #define ARIZONA_GP5_FALL_EINT2_SHIFT 5 /* GP5_FALL_EINT2 */ |
| @@ -5379,6 +5399,10 @@ | |||
| 5379 | /* | 5399 | /* |
| 5380 | * R3413 (0xD55) - AOD IRQ Raw Status | 5400 | * R3413 (0xD55) - AOD IRQ Raw Status |
| 5381 | */ | 5401 | */ |
| 5402 | #define ARIZONA_MICD_CLAMP_STS 0x0008 /* MICD_CLAMP_STS */ | ||
| 5403 | #define ARIZONA_MICD_CLAMP_STS_MASK 0x0008 /* MICD_CLAMP_STS */ | ||
| 5404 | #define ARIZONA_MICD_CLAMP_STS_SHIFT 3 /* MICD_CLAMP_STS */ | ||
| 5405 | #define ARIZONA_MICD_CLAMP_STS_WIDTH 1 /* MICD_CLAMP_STS */ | ||
| 5382 | #define ARIZONA_GP5_STS 0x0004 /* GP5_STS */ | 5406 | #define ARIZONA_GP5_STS 0x0004 /* GP5_STS */ |
| 5383 | #define ARIZONA_GP5_STS_MASK 0x0004 /* GP5_STS */ | 5407 | #define ARIZONA_GP5_STS_MASK 0x0004 /* GP5_STS */ |
| 5384 | #define ARIZONA_GP5_STS_SHIFT 2 /* GP5_STS */ | 5408 | #define ARIZONA_GP5_STS_SHIFT 2 /* GP5_STS */ |
| @@ -5395,6 +5419,10 @@ | |||
| 5395 | /* | 5419 | /* |
| 5396 | * R3414 (0xD56) - Jack detect debounce | 5420 | * R3414 (0xD56) - Jack detect debounce |
| 5397 | */ | 5421 | */ |
| 5422 | #define ARIZONA_MICD_CLAMP_DB 0x0008 /* MICD_CLAMP_DB */ | ||
| 5423 | #define ARIZONA_MICD_CLAMP_DB_MASK 0x0008 /* MICD_CLAMP_DB */ | ||
| 5424 | #define ARIZONA_MICD_CLAMP_DB_SHIFT 3 /* MICD_CLAMP_DB */ | ||
| 5425 | #define ARIZONA_MICD_CLAMP_DB_WIDTH 1 /* MICD_CLAMP_DB */ | ||
| 5398 | #define ARIZONA_JD2_DB 0x0002 /* JD2_DB */ | 5426 | #define ARIZONA_JD2_DB 0x0002 /* JD2_DB */ |
| 5399 | #define ARIZONA_JD2_DB_MASK 0x0002 /* JD2_DB */ | 5427 | #define ARIZONA_JD2_DB_MASK 0x0002 /* JD2_DB */ |
| 5400 | #define ARIZONA_JD2_DB_SHIFT 1 /* JD2_DB */ | 5428 | #define ARIZONA_JD2_DB_SHIFT 1 /* JD2_DB */ |
