Message ID | 20191030085533.14299-1-shumingf@realtek.com (mailing list archive) |
---|---|
State | Accepted |
Commit | e226445802cb2a51c3cb127fac31fba0a4330e87 |
Headers | show |
Series | [1/3] ASoC: rt5682: improve the sensitivity of push button | expand |
On 10/30/19 3:55 AM, shumingf@realtek.com wrote: > From: Shuming Fan <shumingf@realtek.com> > > The sensitivity could improve by decreasing the HW debounce time could be improved > and reduce the delay time of workequeue. typo: work queue. > This patch added a device property for HW debounce time control. > We could change this value to tune the sensitivity of push button. so for an Intel platform without DT, could we set this property in the machine driver as done for bytcr_rt5640/51? > > Signed-off-by: Shuming Fan <shumingf@realtek.com> > --- > include/sound/rt5682.h | 1 + > sound/soc/codecs/rt5682.c | 15 +++++++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/include/sound/rt5682.h b/include/sound/rt5682.h > index bf2ee75aabb1..bc2c31734df1 100644 > --- a/include/sound/rt5682.h > +++ b/include/sound/rt5682.h > @@ -31,6 +31,7 @@ struct rt5682_platform_data { > enum rt5682_dmic1_data_pin dmic1_data_pin; > enum rt5682_dmic1_clk_pin dmic1_clk_pin; > enum rt5682_jd_src jd_src; > + unsigned int btndet_delay; > }; > > #endif > diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c > index c50b75ce82e0..35dcec135c8a 100644 > --- a/sound/soc/codecs/rt5682.c > +++ b/sound/soc/codecs/rt5682.c > @@ -44,6 +44,7 @@ static const struct rt5682_platform_data i2s_default_platform_data = { > .dmic1_data_pin = RT5682_DMIC1_DATA_GPIO2, > .dmic1_clk_pin = RT5682_DMIC1_CLK_GPIO3, > .jd_src = RT5682_JD1, > + .btndet_delay = 16, > }; > > struct rt5682_priv { > @@ -1026,6 +1027,18 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component, > regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, > RT5682_JD1_EN_MASK | RT5682_JD1_POL_MASK, > RT5682_JD1_EN | RT5682_JD1_POL_NOR); > + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_4, > + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | > + rt5682->pdata.btndet_delay)); > + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_5, > + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | > + rt5682->pdata.btndet_delay)); > + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_6, > + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | > + rt5682->pdata.btndet_delay)); > + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_7, > + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | > + rt5682->pdata.btndet_delay)); > mod_delayed_work(system_power_efficient_wq, > &rt5682->jack_detect_work, msecs_to_jiffies(250)); > break; > @@ -2467,6 +2480,8 @@ static int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev) > &rt5682->pdata.dmic1_clk_pin); > device_property_read_u32(dev, "realtek,jd-src", > &rt5682->pdata.jd_src); > + device_property_read_u32(dev, "realtek,btndet-delay", > + &rt5682->pdata.btndet_delay); > > rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node, > "realtek,ldo1-en-gpios", 0); >
On Wed, Oct 30, 2019 at 04:55:33PM +0800, shumingf@realtek.com wrote: > + device_property_read_u32(dev, "realtek,btndet-delay", > + &rt5682->pdata.btndet_delay); This should have a matching binding document update.
diff --git a/include/sound/rt5682.h b/include/sound/rt5682.h index bf2ee75aabb1..bc2c31734df1 100644 --- a/include/sound/rt5682.h +++ b/include/sound/rt5682.h @@ -31,6 +31,7 @@ struct rt5682_platform_data { enum rt5682_dmic1_data_pin dmic1_data_pin; enum rt5682_dmic1_clk_pin dmic1_clk_pin; enum rt5682_jd_src jd_src; + unsigned int btndet_delay; }; #endif diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c index c50b75ce82e0..35dcec135c8a 100644 --- a/sound/soc/codecs/rt5682.c +++ b/sound/soc/codecs/rt5682.c @@ -44,6 +44,7 @@ static const struct rt5682_platform_data i2s_default_platform_data = { .dmic1_data_pin = RT5682_DMIC1_DATA_GPIO2, .dmic1_clk_pin = RT5682_DMIC1_CLK_GPIO3, .jd_src = RT5682_JD1, + .btndet_delay = 16, }; struct rt5682_priv { @@ -1026,6 +1027,18 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component, regmap_update_bits(rt5682->regmap, RT5682_IRQ_CTRL_2, RT5682_JD1_EN_MASK | RT5682_JD1_POL_MASK, RT5682_JD1_EN | RT5682_JD1_POL_NOR); + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_4, + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | + rt5682->pdata.btndet_delay)); + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_5, + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | + rt5682->pdata.btndet_delay)); + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_6, + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | + rt5682->pdata.btndet_delay)); + regmap_update_bits(rt5682->regmap, RT5682_4BTN_IL_CMD_7, + 0x7f7f, (rt5682->pdata.btndet_delay << 8 | + rt5682->pdata.btndet_delay)); mod_delayed_work(system_power_efficient_wq, &rt5682->jack_detect_work, msecs_to_jiffies(250)); break; @@ -2467,6 +2480,8 @@ static int rt5682_parse_dt(struct rt5682_priv *rt5682, struct device *dev) &rt5682->pdata.dmic1_clk_pin); device_property_read_u32(dev, "realtek,jd-src", &rt5682->pdata.jd_src); + device_property_read_u32(dev, "realtek,btndet-delay", + &rt5682->pdata.btndet_delay); rt5682->pdata.ldo1_en = of_get_named_gpio(dev->of_node, "realtek,ldo1-en-gpios", 0);