mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
ASoC: ts3a227e: add parameters to control debounce times
Add devicetree parameters to control the insert, release and press debounce times. Signed-off-by: Astrid Rost <astrid.rost@axis.com> Link: https://lore.kernel.org/r/20220921081834.22009-4-astrid.rost@axis.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f7aadbb23c
commit
d20fa87e80
1 changed files with 55 additions and 6 deletions
|
@ -78,12 +78,20 @@ static const int ts3a227e_buttons[] = {
|
||||||
#define ADC_COMPLETE_INT_DISABLE 0x04
|
#define ADC_COMPLETE_INT_DISABLE 0x04
|
||||||
#define INTB_DISABLE 0x08
|
#define INTB_DISABLE 0x08
|
||||||
|
|
||||||
|
/* TS3A227E_REG_SETTING_1 0x4 */
|
||||||
|
#define DEBOUNCE_INSERTION_SETTING_SFT (0)
|
||||||
|
#define DEBOUNCE_INSERTION_SETTING_MASK (0x7 << DEBOUNCE_PRESS_SETTING_SFT)
|
||||||
|
|
||||||
/* TS3A227E_REG_SETTING_2 0x05 */
|
/* TS3A227E_REG_SETTING_2 0x05 */
|
||||||
#define KP_ENABLE 0x04
|
#define KP_ENABLE 0x04
|
||||||
|
|
||||||
/* TS3A227E_REG_SETTING_3 0x06 */
|
/* TS3A227E_REG_SETTING_3 0x06 */
|
||||||
#define MICBIAS_SETTING_SFT (3)
|
#define MICBIAS_SETTING_SFT 3
|
||||||
#define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT)
|
#define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT)
|
||||||
|
#define DEBOUNCE_RELEASE_SETTING_SFT 2
|
||||||
|
#define DEBOUNCE_RELEASE_SETTING_MASK (0x1 << DEBOUNCE_RELEASE_SETTING_SFT)
|
||||||
|
#define DEBOUNCE_PRESS_SETTING_SFT 0
|
||||||
|
#define DEBOUNCE_PRESS_SETTING_MASK (0x3 << DEBOUNCE_PRESS_SETTING_SFT)
|
||||||
|
|
||||||
/* TS3A227E_REG_ACCESSORY_STATUS 0x0b */
|
/* TS3A227E_REG_ACCESSORY_STATUS 0x0b */
|
||||||
#define TYPE_3_POLE 0x01
|
#define TYPE_3_POLE 0x01
|
||||||
|
@ -136,7 +144,7 @@ static bool ts3a227e_volatile_reg(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case TS3A227E_REG_INTERRUPT ... TS3A227E_REG_INTERRUPT_DISABLE:
|
case TS3A227E_REG_INTERRUPT ... TS3A227E_REG_INTERRUPT_DISABLE:
|
||||||
case TS3A227E_REG_SETTING_2:
|
case TS3A227E_REG_SETTING_1 ... TS3A227E_REG_SETTING_2:
|
||||||
case TS3A227E_REG_SWITCH_STATUS_1 ... TS3A227E_REG_ADC_OUTPUT:
|
case TS3A227E_REG_SWITCH_STATUS_1 ... TS3A227E_REG_ADC_OUTPUT:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -269,14 +277,55 @@ static const struct regmap_config ts3a227e_regmap_config = {
|
||||||
static int ts3a227e_parse_device_property(struct ts3a227e *ts3a227e,
|
static int ts3a227e_parse_device_property(struct ts3a227e *ts3a227e,
|
||||||
struct device *dev)
|
struct device *dev)
|
||||||
{
|
{
|
||||||
u32 micbias;
|
u32 value;
|
||||||
|
u32 value_ms;
|
||||||
|
u32 setting3_value = 0;
|
||||||
|
u32 setting3_mask = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = device_property_read_u32(dev, "ti,micbias", &micbias);
|
err = device_property_read_u32(dev, "ti,micbias", &value);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
setting3_mask = MICBIAS_SETTING_MASK;
|
||||||
|
setting3_value = (value << MICBIAS_SETTING_SFT) &
|
||||||
|
MICBIAS_SETTING_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = device_property_read_u32(dev, "ti,debounce-release-ms",
|
||||||
|
&value_ms);
|
||||||
|
if (!err) {
|
||||||
|
value = (value_ms > 10);
|
||||||
|
setting3_mask |= DEBOUNCE_RELEASE_SETTING_MASK;
|
||||||
|
setting3_value |= (value << DEBOUNCE_RELEASE_SETTING_SFT) &
|
||||||
|
DEBOUNCE_RELEASE_SETTING_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = device_property_read_u32(dev, "ti,debounce-press-ms", &value_ms);
|
||||||
|
if (!err) {
|
||||||
|
value = (value_ms + 20) / 40;
|
||||||
|
if (value > 3)
|
||||||
|
value = 3;
|
||||||
|
setting3_mask |= DEBOUNCE_PRESS_SETTING_MASK;
|
||||||
|
setting3_value |= (value << DEBOUNCE_PRESS_SETTING_SFT) &
|
||||||
|
DEBOUNCE_PRESS_SETTING_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setting3_mask)
|
||||||
regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3,
|
regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3,
|
||||||
MICBIAS_SETTING_MASK,
|
setting3_mask, setting3_value);
|
||||||
(micbias & 0x07) << MICBIAS_SETTING_SFT);
|
|
||||||
|
err = device_property_read_u32(dev, "ti,debounce-insertion-ms",
|
||||||
|
&value_ms);
|
||||||
|
if (!err) {
|
||||||
|
if (value_ms < 165)
|
||||||
|
value = (value_ms + 15) / 30;
|
||||||
|
else if (value_ms < 1500)
|
||||||
|
value = 6;
|
||||||
|
else
|
||||||
|
value = 7;
|
||||||
|
regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_1,
|
||||||
|
DEBOUNCE_INSERTION_SETTING_MASK,
|
||||||
|
(value << DEBOUNCE_INSERTION_SETTING_SFT) &
|
||||||
|
DEBOUNCE_INSERTION_SETTING_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue