mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-29 21:56:39 +07:00
Merge branch 'ib-extcon-mfd-4.4' into extcon-next
This commit is contained in:
commit
37e57066d5
@ -43,11 +43,18 @@
|
||||
#define ARIZONA_MICD_CLAMP_MODE_JDL_GP5H 0x9
|
||||
#define ARIZONA_MICD_CLAMP_MODE_JDH_GP5H 0xb
|
||||
|
||||
#define ARIZONA_TST_CAP_DEFAULT 0x3
|
||||
#define ARIZONA_TST_CAP_CLAMP 0x1
|
||||
|
||||
#define ARIZONA_HPDET_MAX 10000
|
||||
|
||||
#define HPDET_DEBOUNCE 500
|
||||
#define DEFAULT_MICD_TIMEOUT 2000
|
||||
|
||||
#define QUICK_HEADPHONE_MAX_OHM 3
|
||||
#define MICROPHONE_MIN_OHM 1257
|
||||
#define MICROPHONE_MAX_OHM 30000
|
||||
|
||||
#define MICD_DBTIME_TWO_READINGS 2
|
||||
#define MICD_DBTIME_FOUR_READINGS 4
|
||||
|
||||
@ -117,12 +124,15 @@ static const struct arizona_micd_range micd_default_ranges[] = {
|
||||
{ .max = 430, .key = BTN_5 },
|
||||
};
|
||||
|
||||
/* The number of levels in arizona_micd_levels valid for button thresholds */
|
||||
#define ARIZONA_NUM_MICD_BUTTON_LEVELS 64
|
||||
|
||||
static const int arizona_micd_levels[] = {
|
||||
3, 6, 8, 11, 13, 16, 18, 21, 23, 26, 28, 31, 34, 36, 39, 41, 44, 46,
|
||||
49, 52, 54, 57, 60, 62, 65, 67, 70, 73, 75, 78, 81, 83, 89, 94, 100,
|
||||
105, 111, 116, 122, 127, 139, 150, 161, 173, 186, 196, 209, 220, 245,
|
||||
270, 295, 321, 348, 375, 402, 430, 489, 550, 614, 681, 752, 903, 1071,
|
||||
1257,
|
||||
1257, 30000,
|
||||
};
|
||||
|
||||
static const unsigned int arizona_cable[] = {
|
||||
@ -140,6 +150,7 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
|
||||
{
|
||||
struct arizona *arizona = info->arizona;
|
||||
unsigned int mask = 0, val = 0;
|
||||
unsigned int cap_sel = 0;
|
||||
int ret;
|
||||
|
||||
switch (arizona->type) {
|
||||
@ -147,10 +158,21 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
|
||||
case WM8280:
|
||||
mask = ARIZONA_HP1L_SHRTO | ARIZONA_HP1L_FLWR |
|
||||
ARIZONA_HP1L_SHRTI;
|
||||
if (clamp)
|
||||
if (clamp) {
|
||||
val = ARIZONA_HP1L_SHRTO;
|
||||
else
|
||||
cap_sel = ARIZONA_TST_CAP_CLAMP;
|
||||
} else {
|
||||
val = ARIZONA_HP1L_FLWR | ARIZONA_HP1L_SHRTI;
|
||||
cap_sel = ARIZONA_TST_CAP_DEFAULT;
|
||||
}
|
||||
|
||||
ret = regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_HP_TEST_CTRL_1,
|
||||
ARIZONA_HP1_TST_CAP_SEL_MASK,
|
||||
cap_sel);
|
||||
if (ret != 0)
|
||||
dev_warn(arizona->dev,
|
||||
"Failed to set TST_CAP_SEL: %d\n", ret);
|
||||
break;
|
||||
default:
|
||||
mask = ARIZONA_RMV_SHRT_HP1L;
|
||||
@ -270,6 +292,7 @@ static void arizona_start_mic(struct arizona_extcon_info *info)
|
||||
struct arizona *arizona = info->arizona;
|
||||
bool change;
|
||||
int ret;
|
||||
unsigned int mode;
|
||||
|
||||
/* Microphone detection can't use idle mode */
|
||||
pm_runtime_get(info->dev);
|
||||
@ -295,9 +318,14 @@ static void arizona_start_mic(struct arizona_extcon_info *info)
|
||||
regmap_write(arizona->regmap, 0x80, 0x0);
|
||||
}
|
||||
|
||||
if (info->detecting && arizona->pdata.micd_software_compare)
|
||||
mode = ARIZONA_ACCDET_MODE_ADC;
|
||||
else
|
||||
mode = ARIZONA_ACCDET_MODE_MIC;
|
||||
|
||||
regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_ACCESSORY_DETECT_MODE_1,
|
||||
ARIZONA_ACCDET_MODE_MASK, ARIZONA_ACCDET_MODE_MIC);
|
||||
ARIZONA_ACCDET_MODE_MASK, mode);
|
||||
|
||||
arizona_extcon_pulse_micbias(info);
|
||||
|
||||
@ -804,6 +832,37 @@ static void arizona_micd_detect(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
if (info->detecting && arizona->pdata.micd_software_compare) {
|
||||
/* Must disable MICD before we read the ADCVAL */
|
||||
regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
|
||||
ARIZONA_MICD_ENA, 0);
|
||||
ret = regmap_read(arizona->regmap, ARIZONA_MIC_DETECT_4, &val);
|
||||
if (ret != 0) {
|
||||
dev_err(arizona->dev,
|
||||
"Failed to read MICDET_ADCVAL: %d\n",
|
||||
ret);
|
||||
mutex_unlock(&info->lock);
|
||||
return;
|
||||
}
|
||||
|
||||
dev_dbg(arizona->dev, "MICDET_ADCVAL: %x\n", val);
|
||||
|
||||
val &= ARIZONA_MICDET_ADCVAL_MASK;
|
||||
if (val < ARRAY_SIZE(arizona_micd_levels))
|
||||
val = arizona_micd_levels[val];
|
||||
else
|
||||
val = INT_MAX;
|
||||
|
||||
if (val <= QUICK_HEADPHONE_MAX_OHM)
|
||||
val = ARIZONA_MICD_STS | ARIZONA_MICD_LVL_0;
|
||||
else if (val <= MICROPHONE_MIN_OHM)
|
||||
val = ARIZONA_MICD_STS | ARIZONA_MICD_LVL_1;
|
||||
else if (val <= MICROPHONE_MAX_OHM)
|
||||
val = ARIZONA_MICD_STS | ARIZONA_MICD_LVL_8;
|
||||
else
|
||||
val = ARIZONA_MICD_LVL_8;
|
||||
}
|
||||
|
||||
for (i = 0; i < 10 && !(val & MICD_LVL_0_TO_8); i++) {
|
||||
ret = regmap_read(arizona->regmap, ARIZONA_MIC_DETECT_3, &val);
|
||||
if (ret != 0) {
|
||||
@ -932,10 +991,17 @@ static void arizona_micd_detect(struct work_struct *work)
|
||||
}
|
||||
|
||||
handled:
|
||||
if (info->detecting)
|
||||
if (info->detecting) {
|
||||
if (arizona->pdata.micd_software_compare)
|
||||
regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_MIC_DETECT_1,
|
||||
ARIZONA_MICD_ENA,
|
||||
ARIZONA_MICD_ENA);
|
||||
|
||||
queue_delayed_work(system_power_efficient_wq,
|
||||
&info->micd_timeout_work,
|
||||
msecs_to_jiffies(info->micd_timeout));
|
||||
}
|
||||
|
||||
pm_runtime_mark_last_busy(info->dev);
|
||||
mutex_unlock(&info->lock);
|
||||
@ -991,12 +1057,9 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
|
||||
|
||||
mutex_lock(&info->lock);
|
||||
|
||||
if (arizona->pdata.jd_gpio5) {
|
||||
if (info->micd_clamp) {
|
||||
mask = ARIZONA_MICD_CLAMP_STS;
|
||||
if (arizona->pdata.jd_invert)
|
||||
present = ARIZONA_MICD_CLAMP_STS;
|
||||
else
|
||||
present = 0;
|
||||
present = 0;
|
||||
} else {
|
||||
mask = ARIZONA_JD1_STS;
|
||||
if (arizona->pdata.jd_invert)
|
||||
@ -1055,9 +1118,11 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
|
||||
msecs_to_jiffies(HPDET_DEBOUNCE));
|
||||
}
|
||||
|
||||
regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_JACK_DETECT_DEBOUNCE,
|
||||
ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB, 0);
|
||||
if (info->micd_clamp || !arizona->pdata.jd_invert)
|
||||
regmap_update_bits(arizona->regmap,
|
||||
ARIZONA_JACK_DETECT_DEBOUNCE,
|
||||
ARIZONA_MICD_CLAMP_DB |
|
||||
ARIZONA_JD1_DB, 0);
|
||||
} else {
|
||||
dev_dbg(arizona->dev, "Detected jack removal\n");
|
||||
|
||||
@ -1259,6 +1324,10 @@ static int arizona_extcon_probe(struct platform_device *pdev)
|
||||
info->micd_num_modes = ARRAY_SIZE(micd_default_modes);
|
||||
}
|
||||
|
||||
if (arizona->pdata.gpsw > 0)
|
||||
regmap_update_bits(arizona->regmap, ARIZONA_GP_SWITCH_1,
|
||||
ARIZONA_SW1_MODE_MASK, arizona->pdata.gpsw);
|
||||
|
||||
if (arizona->pdata.micd_pol_gpio > 0) {
|
||||
if (info->micd_modes[0].gpio)
|
||||
mode = GPIOF_OUT_INIT_HIGH;
|
||||
@ -1335,7 +1404,8 @@ static int arizona_extcon_probe(struct platform_device *pdev)
|
||||
break;
|
||||
}
|
||||
|
||||
BUILD_BUG_ON(ARRAY_SIZE(arizona_micd_levels) != 0x40);
|
||||
BUILD_BUG_ON(ARRAY_SIZE(arizona_micd_levels) <
|
||||
ARIZONA_NUM_MICD_BUTTON_LEVELS);
|
||||
|
||||
if (arizona->pdata.num_micd_ranges) {
|
||||
info->micd_ranges = pdata->micd_ranges;
|
||||
@ -1368,11 +1438,11 @@ static int arizona_extcon_probe(struct platform_device *pdev)
|
||||
|
||||
/* Set up all the buttons the user specified */
|
||||
for (i = 0; i < info->num_micd_ranges; i++) {
|
||||
for (j = 0; j < ARRAY_SIZE(arizona_micd_levels); j++)
|
||||
for (j = 0; j < ARIZONA_NUM_MICD_BUTTON_LEVELS; j++)
|
||||
if (arizona_micd_levels[j] >= info->micd_ranges[i].max)
|
||||
break;
|
||||
|
||||
if (j == ARRAY_SIZE(arizona_micd_levels)) {
|
||||
if (j == ARIZONA_NUM_MICD_BUTTON_LEVELS) {
|
||||
dev_err(arizona->dev, "Unsupported MICD level %d\n",
|
||||
info->micd_ranges[i].max);
|
||||
ret = -EINVAL;
|
||||
@ -1436,7 +1506,7 @@ static int arizona_extcon_probe(struct platform_device *pdev)
|
||||
pm_runtime_idle(&pdev->dev);
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
|
||||
if (arizona->pdata.jd_gpio5) {
|
||||
if (info->micd_clamp) {
|
||||
jack_irq_rise = ARIZONA_IRQ_MICD_CLAMP_RISE;
|
||||
jack_irq_fall = ARIZONA_IRQ_MICD_CLAMP_FALL;
|
||||
} else {
|
||||
@ -1541,7 +1611,7 @@ static int arizona_extcon_remove(struct platform_device *pdev)
|
||||
ARIZONA_MICD_CLAMP_CONTROL,
|
||||
ARIZONA_MICD_CLAMP_MODE_MASK, 0);
|
||||
|
||||
if (arizona->pdata.jd_gpio5) {
|
||||
if (info->micd_clamp) {
|
||||
jack_irq_rise = ARIZONA_IRQ_MICD_CLAMP_RISE;
|
||||
jack_irq_fall = ARIZONA_IRQ_MICD_CLAMP_FALL;
|
||||
} else {
|
||||
|
@ -1481,6 +1481,7 @@ static const struct reg_default wm5110_reg_default[] = {
|
||||
{ 0x00000C04, 0xA101 }, /* R3076 - GPIO5 CTRL */
|
||||
{ 0x00000C0F, 0x0400 }, /* R3087 - IRQ CTRL 1 */
|
||||
{ 0x00000C10, 0x1000 }, /* R3088 - GPIO Debounce Config */
|
||||
{ 0x00000C18, 0x0000 }, /* R3096 - GP Switch 1 */
|
||||
{ 0x00000C20, 0x8002 }, /* R3104 - Misc Pad Ctrl 1 */
|
||||
{ 0x00000C21, 0x8001 }, /* R3105 - Misc Pad Ctrl 2 */
|
||||
{ 0x00000C22, 0x0000 }, /* R3106 - Misc Pad Ctrl 3 */
|
||||
@ -1811,6 +1812,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
||||
case ARIZONA_MIC_DETECT_1:
|
||||
case ARIZONA_MIC_DETECT_2:
|
||||
case ARIZONA_MIC_DETECT_3:
|
||||
case ARIZONA_MIC_DETECT_4:
|
||||
case ARIZONA_MIC_DETECT_LEVEL_1:
|
||||
case ARIZONA_MIC_DETECT_LEVEL_2:
|
||||
case ARIZONA_MIC_DETECT_LEVEL_3:
|
||||
@ -1910,6 +1912,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
||||
case ARIZONA_HP1_SHORT_CIRCUIT_CTRL:
|
||||
case ARIZONA_HP2_SHORT_CIRCUIT_CTRL:
|
||||
case ARIZONA_HP3_SHORT_CIRCUIT_CTRL:
|
||||
case ARIZONA_HP_TEST_CTRL_1:
|
||||
case ARIZONA_AIF1_BCLK_CTRL:
|
||||
case ARIZONA_AIF1_TX_PIN_CTRL:
|
||||
case ARIZONA_AIF1_RX_PIN_CTRL:
|
||||
@ -2527,6 +2530,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
||||
case ARIZONA_GPIO5_CTRL:
|
||||
case ARIZONA_IRQ_CTRL_1:
|
||||
case ARIZONA_GPIO_DEBOUNCE_CONFIG:
|
||||
case ARIZONA_GP_SWITCH_1:
|
||||
case ARIZONA_MISC_PAD_CTRL_1:
|
||||
case ARIZONA_MISC_PAD_CTRL_2:
|
||||
case ARIZONA_MISC_PAD_CTRL_3:
|
||||
@ -2847,12 +2851,14 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
|
||||
case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
|
||||
case ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS:
|
||||
case ARIZONA_MIC_DETECT_3:
|
||||
case ARIZONA_MIC_DETECT_4:
|
||||
case ARIZONA_HP_CTRL_1L:
|
||||
case ARIZONA_HP_CTRL_1R:
|
||||
case ARIZONA_HEADPHONE_DETECT_2:
|
||||
case ARIZONA_INPUT_ENABLES_STATUS:
|
||||
case ARIZONA_OUTPUT_STATUS_1:
|
||||
case ARIZONA_RAW_OUTPUT_STATUS_1:
|
||||
case ARIZONA_HP_TEST_CTRL_1:
|
||||
case ARIZONA_SLIMBUS_RX_PORT_STATUS:
|
||||
case ARIZONA_SLIMBUS_TX_PORT_STATUS:
|
||||
case ARIZONA_INTERRUPT_STATUS_1:
|
||||
|
@ -107,5 +107,7 @@
|
||||
#define ARIZONA_ACCDET_MODE_MIC 0
|
||||
#define ARIZONA_ACCDET_MODE_HPL 1
|
||||
#define ARIZONA_ACCDET_MODE_HPR 2
|
||||
#define ARIZONA_ACCDET_MODE_HPM 4
|
||||
#define ARIZONA_ACCDET_MODE_ADC 7
|
||||
|
||||
#endif
|
||||
|
@ -124,6 +124,9 @@ struct arizona_pdata {
|
||||
/** Channel to use for headphone detection */
|
||||
unsigned int hpdet_channel;
|
||||
|
||||
/** Use software comparison to determine mic presence */
|
||||
bool micd_software_compare;
|
||||
|
||||
/** Extra debounce timeout used during initial mic detection (ms) */
|
||||
unsigned int micd_detect_debounce;
|
||||
|
||||
@ -181,6 +184,9 @@ struct arizona_pdata {
|
||||
|
||||
/** GPIO for primary IRQ (used for edge triggered emulation) */
|
||||
int irq_gpio;
|
||||
|
||||
/** General purpose switch control */
|
||||
unsigned int gpsw;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -242,6 +242,7 @@
|
||||
#define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0
|
||||
#define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1
|
||||
#define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2
|
||||
#define ARIZONA_HP_TEST_CTRL_1 0x4A4
|
||||
#define ARIZONA_SPK_CTRL_2 0x4B5
|
||||
#define ARIZONA_SPK_CTRL_3 0x4B6
|
||||
#define ARIZONA_DAC_COMP_1 0x4DC
|
||||
@ -2359,9 +2360,9 @@
|
||||
#define ARIZONA_ACCDET_SRC_MASK 0x2000 /* ACCDET_SRC */
|
||||
#define ARIZONA_ACCDET_SRC_SHIFT 13 /* ACCDET_SRC */
|
||||
#define ARIZONA_ACCDET_SRC_WIDTH 1 /* ACCDET_SRC */
|
||||
#define ARIZONA_ACCDET_MODE_MASK 0x0003 /* ACCDET_MODE - [1:0] */
|
||||
#define ARIZONA_ACCDET_MODE_SHIFT 0 /* ACCDET_MODE - [1:0] */
|
||||
#define ARIZONA_ACCDET_MODE_WIDTH 2 /* ACCDET_MODE - [1:0] */
|
||||
#define ARIZONA_ACCDET_MODE_MASK 0x0007 /* ACCDET_MODE - [2:0] */
|
||||
#define ARIZONA_ACCDET_MODE_SHIFT 0 /* ACCDET_MODE - [2:0] */
|
||||
#define ARIZONA_ACCDET_MODE_WIDTH 3 /* ACCDET_MODE - [2:0] */
|
||||
|
||||
/*
|
||||
* R667 (0x29B) - Headphone Detect 1
|
||||
@ -3701,6 +3702,13 @@
|
||||
#define ARIZONA_HP3_SC_ENA_SHIFT 12 /* HP3_SC_ENA */
|
||||
#define ARIZONA_HP3_SC_ENA_WIDTH 1 /* HP3_SC_ENA */
|
||||
|
||||
/*
|
||||
* R1188 (0x4A4) HP Test Ctrl 1
|
||||
*/
|
||||
#define ARIZONA_HP1_TST_CAP_SEL_MASK 0x0003 /* HP1_TST_CAP_SEL - [1:0] */
|
||||
#define ARIZONA_HP1_TST_CAP_SEL_SHIFT 0 /* HP1_TST_CAP_SEL - [1:0] */
|
||||
#define ARIZONA_HP1_TST_CAP_SEL_WIDTH 2 /* HP1_TST_CAP_SEL - [1:0] */
|
||||
|
||||
/*
|
||||
* R1244 (0x4DC) - DAC comp 1
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user