Commit 2031d49c authored by Richard Fitzgerald's avatar Richard Fitzgerald Committed by DidntRead
Browse files

switch: arizona: Make new accdet IP the default case

parent 29cf103b
Loading
Loading
Loading
Loading
+109 −58
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
	default:
		mask = 0;
		break;
	}
	};

	arizona->hpdet_clamp = clamp;

@@ -443,30 +443,33 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
	}

	if (mask) {
		if (info->accdet_ip == 1) {
		switch (info->accdet_ip) {
		case 0:
			ret = regmap_update_bits(arizona->regmap,
					MOON_HEADPHONE_DETECT_0,
					MOON_HPD_OVD_ENA_SEL_MASK,
					val);
					ARIZONA_HP_CTRL_1L, mask, val);
			if (ret != 0)
				dev_warn(arizona->dev, "Failed to do clamp: %d\n",
					ret);
		} else {
			ret = regmap_update_bits(arizona->regmap,
					ARIZONA_HP_CTRL_1L, mask, val);
					ARIZONA_HP_CTRL_1R, mask, val);
			if (ret != 0)
				dev_warn(arizona->dev, "Failed to do clamp: %d\n",
					ret);
			break;
		default:
			ret = regmap_update_bits(arizona->regmap,
					ARIZONA_HP_CTRL_1R, mask, val);
					MOON_HEADPHONE_DETECT_0,
					MOON_HPD_OVD_ENA_SEL_MASK,
					val);
			if (ret != 0)
				dev_warn(arizona->dev, "Failed to do clamp: %d\n",
					ret);
			break;
		}
	}

	/* Restore the desired state while not doing the clamp */
	if (!clamp && (HOHM_TO_OHM(arizona->hp_impedance_x100) >
	if (!clamp && (arizona->hp_impedance >
			arizona->pdata.hpdet_short_circuit_imp) && !ep_sel) {
		ret = regmap_update_bits(arizona->regmap,
					 ARIZONA_OUTPUT_ENABLES_1,
@@ -580,7 +583,17 @@ static void arizona_extcon_set_mode(struct arizona_extcon_info *info, int mode)
					info->micd_modes[mode].gpio);
		}
    }	
	if (info->accdet_ip == 1) {
	switch (info->accdet_ip) {
	case 0:
		regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
			ARIZONA_MICD_BIAS_SRC_MASK,
			info->micd_modes[mode].bias <<
			ARIZONA_MICD_BIAS_SRC_SHIFT);
		regmap_update_bits(arizona->regmap,
			ARIZONA_ACCESSORY_DETECT_MODE_1,
			ARIZONA_ACCDET_SRC, info->micd_modes[mode].src);
		break;
	default:
		regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
			MOON_MICD_BIAS_SRC_MASK,
			info->micd_modes[mode].bias <<
@@ -597,14 +610,7 @@ static void arizona_extcon_set_mode(struct arizona_extcon_info *info, int mode)
			MOON_HP1_GND_SEL_MASK,
			info->micd_modes[mode].gnd <<
			MOON_HP1_GND_SEL_SHIFT);
	} else {
		regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
			ARIZONA_MICD_BIAS_SRC_MASK,
			info->micd_modes[mode].bias <<
			ARIZONA_MICD_BIAS_SRC_SHIFT);
		regmap_update_bits(arizona->regmap,
			ARIZONA_ACCESSORY_DETECT_MODE_1,
			ARIZONA_ACCDET_SRC, info->micd_modes[mode].src);
		break;
	}

	info->micd_mode = mode;
@@ -891,7 +897,10 @@ static int arizona_hpdet_read(struct arizona_extcon_info *info)
		return ret;
	}

	if (info->accdet_ip == 1) {
	switch (info->accdet_ip) {
	case 0:
		break;
	default:
		regmap_read(arizona->regmap, MOON_HEADPHONE_DETECT_0,
				&sense_pin);
		sense_pin = (sense_pin & MOON_HPD_SENSE_SEL_MASK)
@@ -904,6 +913,7 @@ static int arizona_hpdet_read(struct arizona_extcon_info *info)
		default:
			is_jdx_micdetx_pin = true;
		}
		break;
	}

	switch (info->hpdet_ip_version) {
@@ -1462,6 +1472,44 @@ void arizona_set_headphone_imp(struct arizona_extcon_info *info, int imp)
}
EXPORT_SYMBOL_GPL(arizona_set_headphone_imp);

static void arizona_hpdet_start_micd(struct arizona_extcon_info *info)
{
	struct arizona *arizona = info->arizona;

	regmap_update_bits(arizona->regmap, MOON_MIC_DETECT_0,
			   MOON_MICD1_ADC_MODE_MASK,
			   MOON_MICD1_ADC_MODE_MASK);
	regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
			   ARIZONA_MICD_BIAS_STARTTIME_MASK |
			   ARIZONA_MICD_RATE_MASK |
			   ARIZONA_MICD_DBTIME_MASK |
			   ARIZONA_MICD_ENA, ARIZONA_MICD_ENA);
}

static void arizona_hpdet_stop_micd(struct arizona_extcon_info *info)
{
	struct arizona *arizona = info->arizona;
	unsigned int start_time = 1, dbtime = 1, rate = 1;

	if (arizona->pdata.micd_bias_start_time)
		start_time = arizona->pdata.micd_bias_start_time;

	if (arizona->pdata.micd_rate)
		rate = arizona->pdata.micd_rate;

	if (arizona->pdata.micd_dbtime)
		dbtime = arizona->pdata.micd_dbtime;

	regmap_update_bits(arizona->regmap, ARIZONA_MIC_DETECT_1,
			   ARIZONA_MICD_BIAS_STARTTIME_MASK |
			   ARIZONA_MICD_RATE_MASK |
			   ARIZONA_MICD_DBTIME_MASK |
			   ARIZONA_MICD_ENA,
			   start_time << ARIZONA_MICD_BIAS_STARTTIME_SHIFT |
			   rate << ARIZONA_MICD_RATE_SHIFT |
			   dbtime << ARIZONA_MICD_DBTIME_SHIFT);
}

int arizona_hpdet_start(struct arizona_extcon_info *info)
{
	struct arizona *arizona = info->arizona;
@@ -1483,7 +1531,20 @@ int arizona_hpdet_start(struct arizona_extcon_info *info)
	/* Make sure we keep the device enabled during the measurement */
	pm_runtime_get_sync(info->dev);

	if (info->accdet_ip == 1) {
	switch (info->accdet_ip) {
	case 0:
		arizona_extcon_hp_clamp(info, true);
		ret = regmap_update_bits(arizona->regmap,
					 ARIZONA_ACCESSORY_DETECT_MODE_1,
					 ARIZONA_ACCDET_MODE_MASK,
					 info->state->mode);
		if (ret != 0) {
			dev_err(arizona->dev, "Failed to set HPDET mode (%d): %d\n",
				info->state->mode, ret);
			goto err;
		}
		break;
	default:
		if (info->state->mode == ARIZONA_ACCDET_MODE_HPL) {
			hpd_clamp = arizona->pdata.hpd_l_pins.clamp_pin;
			hpd_sense = arizona->pdata.hpd_l_pins.impd_pin;
@@ -1511,17 +1572,7 @@ int arizona_hpdet_start(struct arizona_extcon_info *info)
			goto err;
		}
		arizona_extcon_hp_clamp(info, true);
	} else {
		arizona_extcon_hp_clamp(info, true);
		ret = regmap_update_bits(arizona->regmap,
					 ARIZONA_ACCESSORY_DETECT_MODE_1,
					 ARIZONA_ACCDET_MODE_MASK,
					 info->state->mode);
		if (ret != 0) {
			dev_err(arizona->dev, "Failed to set HPDET mode (%d): %d\n",
				info->state->mode, ret);
			goto err;
		}
		break;
	}

	ret = regmap_update_bits(arizona->regmap, ARIZONA_HEADPHONE_DETECT_1,
@@ -1570,11 +1621,15 @@ void arizona_hpdet_stop(struct arizona_extcon_info *info)
			   ARIZONA_HP_IMPEDANCE_RANGE_MASK |
			   ARIZONA_HP_POLL, 0);

	if (info->accdet_ip != 1) {
	switch (info->accdet_ip) {
	case 0:
		/* Reset to default mode */
		regmap_update_bits(arizona->regmap,
				   ARIZONA_ACCESSORY_DETECT_MODE_1,
				   ARIZONA_ACCDET_MODE_MASK, 0);
		break;
	default:
		break;
	}

	arizona_extcon_hp_clamp(info, false);
@@ -1648,7 +1703,13 @@ int arizona_micd_start(struct arizona_extcon_info *info)
		mutex_unlock(&arizona->reg_setting_lock);
	}

	if (info->accdet_ip == 1) {
	switch (info->accdet_ip) {
	case 0:
		regmap_update_bits(arizona->regmap,
			ARIZONA_ACCESSORY_DETECT_MODE_1,
			ARIZONA_ACCDET_MODE_MASK, info->state->mode);
		break;
	default:
		if (info->state->mode == ARIZONA_ACCDET_MODE_ADC)
			micd_mode = MOON_MICD1_ADC_MODE_MASK;
		else
@@ -1656,10 +1717,7 @@ int arizona_micd_start(struct arizona_extcon_info *info)

		regmap_update_bits(arizona->regmap, MOON_MIC_DETECT_0,
			MOON_MICD1_ADC_MODE_MASK, micd_mode);
	} else {
		regmap_update_bits(arizona->regmap,
			ARIZONA_ACCESSORY_DETECT_MODE_1,
			ARIZONA_ACCDET_MODE_MASK, info->state->mode);
		break;
	}

	arizona_extcon_set_micd_bias(info,
@@ -3154,6 +3212,8 @@ static int arizona_extcon_probe(struct platform_device *pdev)
	arizona->extcon_info = info;

	switch (arizona->type) {
	case WM8997:
		break;
	case WM5102:
		switch (arizona->rev) {
		case 0:
@@ -3165,6 +3225,11 @@ static int arizona_extcon_probe(struct platform_device *pdev)
			break;
		}
		break;
	case WM8998:
	case WM1814:
		info->micd_clamp = true;
		info->hpdet_ip_version = 2;
		break;
	case WM8280:
	case WM5110:
		switch (arizona->rev) {
@@ -3187,23 +3252,6 @@ static int arizona_extcon_probe(struct platform_device *pdev)
	default:
		info->micd_clamp = true;
		info->hpdet_ip_version = 2;
		break;
	}

	switch (arizona->type) {
	case WM5102:
	case WM5110:
	case WM8997:
	case WM8280:
	case WM8998:
	case WM1814:
	case WM8285:
	case WM1840:
	case WM1831:
	case CS47L24:
		info->accdet_ip = 0;
		break;
	default:
		info->accdet_ip = 1;
		break;
	}
@@ -3232,13 +3280,16 @@ static int arizona_extcon_probe(struct platform_device *pdev)
		info->micd_modes = pdata->micd_configs;
		info->micd_num_modes = pdata->num_micd_configs;
	} else {
		if (info->accdet_ip == 1) {
		switch (info->accdet_ip) {
		case 0:
			info->micd_modes = micd_default_modes;
			info->micd_num_modes = ARRAY_SIZE(micd_default_modes);
			break;
		default:
			info->micd_modes = moon_micd_default_modes;
			info->micd_num_modes =
				ARRAY_SIZE(moon_micd_default_modes);
		} else {
			info->micd_modes = micd_default_modes;
			info->micd_num_modes = ARRAY_SIZE(micd_default_modes);
			break;
		}
	}