diff mbox series

[1/3] ASoC: rt5682: improve the sensitivity of push button

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

Commit Message

Shuming [θŒƒζ›ΈιŠ˜] Oct. 30, 2019, 8:55 a.m. UTC
From: Shuming Fan <shumingf@realtek.com>

The sensitivity could improve by decreasing the HW debounce time
and reduce the delay time of workequeue.
This patch added a device property for HW debounce time control.
We could change this value to tune the sensitivity of push button.

Signed-off-by: Shuming Fan <shumingf@realtek.com>
---
 include/sound/rt5682.h    |  1 +
 sound/soc/codecs/rt5682.c | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

Comments

Pierre-Louis Bossart Oct. 30, 2019, 1:59 p.m. UTC | #1
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);
>
Mark Brown Oct. 30, 2019, 2:07 p.m. UTC | #2
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 mbox series

Patch

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);