@@ -43,6 +43,25 @@
#define ACCDET_DIGITAL_FASTDISCHARGE BIT(13)
#define ACCDET_AD_FASTDISCHRAGE BIT(14)
+/* Debounce time = (DEBOUNCE/32768) sec */
+#define ACCDET_DEBOUNCE0_625MS 0x800
+#define ACCDET_DEBOUNCE1_625MS 0x800
+#define ACCDET_DEBOUNCE3_976US 0x20
+#define ACCDET_DEBOUNCE_AUXADC_2MS 0x44
+/* PWM frequency = 32768/(PWM_WIDTH + 1) Hz */
+#define ACCDET_PWM_WIDTH_25_580HZ 0x500
+/* Duty cycle = (PWM_THRESH + 1) / (PWM_WIDTH + 1) */
+#define ACCDET_PWM_THRESH_100PERCENT ACCDET_PWM_WIDTH_25_580HZ
+#define ACCDET_RISE_DELAY 0x1f0
+#define ACCDET_FALL_DELAY 1
+#define ACCDET_EINT_DEBOUNCE0_1MS 5
+#define ACCDET_EINT_DEBOUNCE1_900US 3
+#define ACCDET_EINT_DEBOUNCE2_900US 3
+#define ACCDET_EINT_DEBOUNCE3_1MS 5
+#define ACCDET_EINT_INVERTER_DEBOUNCE_256MS 0xe
+#define ACCDET_EINT_CMPMEN_PWM_WIDTH_400MS 4
+#define ACCDET_EINT_CMPMEN_PWM_THRESH_2MS 1
+
static struct platform_driver mt6359_accdet_driver;
static const struct snd_soc_component_driver mt6359_accdet_soc_driver;
@@ -130,7 +149,7 @@ static unsigned int mt6359_accdet_jd_setting(struct mt6359_accdet *priv)
} else if (priv->jd_sts == M_PLUG_OUT) {
/* set debounce to 1ms */
accdet_set_debounce(priv, eint_state000,
- priv->data->pwm_deb->eint_debounce0);
+ ACCDET_EINT_DEBOUNCE0_1MS);
} else {
dev_dbg(priv->dev, "should not be here %s()\n", __func__);
}
@@ -241,11 +260,11 @@ static void mt6359_accdet_recover_jd_setting(struct mt6359_accdet *priv)
/* recover accdet debounce0,3 */
accdet_set_debounce(priv, accdet_state000,
- priv->data->pwm_deb->debounce0);
+ ACCDET_DEBOUNCE0_625MS);
accdet_set_debounce(priv, accdet_state001,
- priv->data->pwm_deb->debounce1);
+ ACCDET_DEBOUNCE1_625MS);
accdet_set_debounce(priv, accdet_state011,
- priv->data->pwm_deb->debounce3);
+ ACCDET_DEBOUNCE3_976US);
priv->jack_type = 0;
priv->accdet_status = 0x3;
@@ -390,7 +409,7 @@ static void mt6359_accdet_jd_work(struct work_struct *work)
priv->jack_plugged = false;
accdet_set_debounce(priv, accdet_state011,
- priv->data->pwm_deb->debounce3);
+ ACCDET_DEBOUNCE3_976US);
regmap_update_bits(priv->regmap, ACCDET_SW_EN_ADDR,
ACCDET_SW_EN_MASK_SFT, 0);
mt6359_accdet_recover_jd_setting(priv);
@@ -497,7 +516,6 @@ static int mt6359_accdet_parse_dt(struct mt6359_accdet *priv)
int ret;
struct device *dev = priv->dev;
struct device_node *node = NULL;
- int pwm_deb[15] = {0};
unsigned int tmp = 0;
node = of_get_child_by_name(dev->parent->of_node, "accdet");
@@ -514,12 +532,6 @@ static int mt6359_accdet_parse_dt(struct mt6359_accdet *priv)
if (ret)
priv->data->mic_mode = 2;
- ret = of_property_read_u32_array(node, "mediatek,pwm-deb-setting",
- pwm_deb, ARRAY_SIZE(pwm_deb));
- /* debounce8(auxadc debounce) is default, needn't get from dts */
- if (!ret)
- memcpy(priv->data->pwm_deb, pwm_deb, sizeof(pwm_deb));
-
priv->data->hp_eint_high = of_property_read_bool(node, "mediatek,hp-eint-high");
ret = of_property_read_u32(node, "mediatek,eint-detect-mode",
@@ -554,8 +566,8 @@ static void config_digital_init_by_mode(struct mt6359_accdet *priv)
{
/* enable eint cmpmem pwm */
regmap_write(priv->regmap, ACCDET_EINT_CMPMEN_PWM_THRESH_ADDR,
- (priv->data->pwm_deb->eint_pwm_width << 4 |
- priv->data->pwm_deb->eint_pwm_thresh));
+ (ACCDET_EINT_CMPMEN_PWM_WIDTH_400MS << 4 |
+ ACCDET_EINT_CMPMEN_PWM_THRESH_2MS));
/* DA signal stable */
if (priv->caps & ACCDET_PMIC_EINT0) {
regmap_write(priv->regmap, ACCDET_DA_STABLE_ADDR,
@@ -675,22 +687,22 @@ static void mt6359_accdet_init(struct mt6359_accdet *priv)
mdelay(1);
/* init the debounce time (debounce/32768)sec */
accdet_set_debounce(priv, accdet_state000,
- priv->data->pwm_deb->debounce0);
+ ACCDET_DEBOUNCE0_625MS);
accdet_set_debounce(priv, accdet_state001,
- priv->data->pwm_deb->debounce1);
+ ACCDET_DEBOUNCE1_625MS);
accdet_set_debounce(priv, accdet_state011,
- priv->data->pwm_deb->debounce3);
+ ACCDET_DEBOUNCE3_976US);
accdet_set_debounce(priv, accdet_auxadc,
- priv->data->pwm_deb->debounce4);
+ ACCDET_DEBOUNCE_AUXADC_2MS);
accdet_set_debounce(priv, eint_state000,
- priv->data->pwm_deb->eint_debounce0);
+ ACCDET_EINT_DEBOUNCE0_1MS);
accdet_set_debounce(priv, eint_state001,
- priv->data->pwm_deb->eint_debounce1);
+ ACCDET_EINT_DEBOUNCE1_900US);
accdet_set_debounce(priv, eint_state011,
- priv->data->pwm_deb->eint_debounce3);
+ ACCDET_EINT_DEBOUNCE3_1MS);
accdet_set_debounce(priv, eint_inverter_state000,
- priv->data->pwm_deb->eint_inverter_debounce);
+ ACCDET_EINT_INVERTER_DEBOUNCE_256MS);
regmap_update_bits(priv->regmap, RG_ACCDET_RST_ADDR,
RG_ACCDET_RST_MASK_SFT, BIT(RG_ACCDET_RST_SFT));
@@ -705,12 +717,12 @@ static void mt6359_accdet_init(struct mt6359_accdet *priv)
/* init pwm frequency, duty & rise/falling delay */
regmap_write(priv->regmap, ACCDET_PWM_WIDTH_ADDR,
- REGISTER_VAL(priv->data->pwm_deb->pwm_width));
+ REGISTER_VAL(ACCDET_PWM_WIDTH_25_580HZ));
regmap_write(priv->regmap, ACCDET_PWM_THRESH_ADDR,
- REGISTER_VAL(priv->data->pwm_deb->pwm_thresh));
+ REGISTER_VAL(ACCDET_PWM_THRESH_100PERCENT));
regmap_write(priv->regmap, ACCDET_RISE_DELAY_ADDR,
- (priv->data->pwm_deb->fall_delay << 15 |
- priv->data->pwm_deb->rise_delay));
+ (ACCDET_FALL_DELAY << 15 |
+ ACCDET_RISE_DELAY));
regmap_read(priv->regmap, RG_AUDPWDBMICBIAS1_ADDR, ®);
if (priv->data->mic_vol <= 7) {
@@ -806,12 +818,6 @@ static int mt6359_accdet_probe(struct platform_device *pdev)
if (!priv->data)
return -ENOMEM;
- priv->data->pwm_deb = devm_kzalloc(&pdev->dev,
- sizeof(struct pwm_deb_settings),
- GFP_KERNEL);
- if (!priv->data->pwm_deb)
- return -ENOMEM;
-
priv->regmap = mt6397->regmap;
if (IS_ERR(priv->regmap)) {
ret = PTR_ERR(priv->regmap);
@@ -50,30 +50,10 @@ enum {
eint_inverter_state000,
};
-struct pwm_deb_settings {
- unsigned int pwm_width;
- unsigned int pwm_thresh;
- unsigned int fall_delay;
- unsigned int rise_delay;
- unsigned int debounce0;
- unsigned int debounce1;
- unsigned int debounce3;
- unsigned int debounce4;
- unsigned int eint_pwm_width;
- unsigned int eint_pwm_thresh;
- unsigned int eint_debounce0;
- unsigned int eint_debounce1;
- unsigned int eint_debounce2;
- unsigned int eint_debounce3;
- unsigned int eint_inverter_debounce;
-
-};
-
struct dts_data {
unsigned int mic_vol;
unsigned int mic_mode;
bool hp_eint_high;
- struct pwm_deb_settings *pwm_deb;
unsigned int eint_detect_mode;
unsigned int eint_comp_vth;
};
Instead of reading a bunch of PWM debounce settings from the Devicetree, set reasonable values inside the driver that are known to work across multiple boards. There are no current users of these DT properties, so no backward compatibility needs to be maintained. The properties can be properly introduced in the binding in the future if different boards really need to override them. Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com> --- sound/soc/codecs/mt6359-accdet.c | 70 ++++++++++++++++++++++------------------ sound/soc/codecs/mt6359-accdet.h | 20 ------------ 2 files changed, 38 insertions(+), 52 deletions(-)