rk_headset: switch to using gpiod API

Signed-off-by: Shunhua Lan <lsh@rock-chips.com>
Change-Id: If159a1101956bb4e6f1ca439bab2ebaa19a39cb6
This commit is contained in:
Shunhua Lan
2025-06-16 15:52:48 +08:00
committed by Tao Huang
parent 38389607d5
commit 4a10231c03
4 changed files with 27 additions and 50 deletions

View File

@@ -113,15 +113,15 @@ void Modem_Mic_release(void)
}
#endif
static int read_gpio(int gpio)
static int read_gpio(struct gpio_desc *gpio)
{
int i, level;
for (i = 0; i < 3; i++) {
level = gpio_get_value(gpio);
level = gpiod_get_value(gpio);
if (level < 0) {
pr_warn("%s:get pin level again,pin=%d,i=%d\n",
__func__, gpio, i);
__func__, desc_to_gpio(gpio), i);
msleep(1);
continue;
} else
@@ -412,7 +412,7 @@ int rk_headset_probe(struct platform_device *pdev,
register_early_suspend(&hs_early_suspend);
#endif
if (pdata->headset_gpio) {
headset->irq[HEADSET] = gpio_to_irq(pdata->headset_gpio);
headset->irq[HEADSET] = gpiod_to_irq(pdata->headset_gpio);
if (pdata->headset_insert_type == HEADSET_IN_HIGH)
headset->irq_type[HEADSET] = IRQF_TRIGGER_RISING;
else
@@ -431,7 +431,7 @@ int rk_headset_probe(struct platform_device *pdev,
goto failed;
}
if (pdata->hook_gpio) {
headset->irq[HOOK] = gpio_to_irq(pdata->hook_gpio);
headset->irq[HOOK] = gpiod_to_irq(pdata->hook_gpio);
headset->irq_type[HOOK] =
pdata->hook_down_type == HOOK_DOWN_HIGH ?
IRQF_TRIGGER_RISING :

View File

@@ -10,11 +10,11 @@
struct rk_headset_pdata {
/* heaset about */
unsigned int headset_gpio;
struct gpio_desc *headset_gpio;
/* Headphones into the state level */
unsigned int headset_insert_type;
/* hook about */
unsigned int hook_gpio;
struct gpio_desc *hook_gpio;
/* Hook key down status */
unsigned int hook_down_type;
#ifdef CONFIG_MODEM_MIC_SWITCH

View File

@@ -120,10 +120,10 @@ static irqreturn_t headset_interrupt(int irq, void *dev_id)
headset_info->heatset_irq_working = BUSY;
msleep(150);
for (i = 0; i < 3; i++) {
level = gpio_get_value(pdata->headset_gpio);
level = gpiod_get_value(pdata->headset_gpio);
if (level < 0) {
pr_err("%s:get pin level again,pin=%d,i=%d\n",
__func__, pdata->headset_gpio, i);
__func__, desc_to_gpio(pdata->headset_gpio), i);
msleep(1);
continue;
}
@@ -134,7 +134,7 @@ static irqreturn_t headset_interrupt(int irq, void *dev_id)
goto out;
} else {
pr_err("%s:get pin level again, pin=%d,i=%d\n",
__func__, pdata->headset_gpio, i);
__func__, desc_to_gpio(pdata->headset_gpio), i);
}
old_status = headset_info->headset_status;
@@ -328,8 +328,8 @@ static void hook_work_callback(struct work_struct *work)
headset->heatset_irq_working == BUSY ||
headset->heatset_irq_working == WAIT ||
(pdata->headset_insert_type ?
gpio_get_value(pdata->headset_gpio) == 0 :
gpio_get_value(pdata->headset_gpio) > 0)) {
gpiod_get_value(pdata->headset_gpio) == 0 :
gpiod_get_value(pdata->headset_gpio) > 0)) {
DBG("Headset is out or waiting for headset is in or out, after same time check HOOK key\n");
goto out;
}
@@ -349,8 +349,8 @@ static void hook_work_callback(struct work_struct *work)
headset->heatset_irq_working == BUSY ||
headset->heatset_irq_working == WAIT ||
(pdata->headset_insert_type ?
gpio_get_value(pdata->headset_gpio) == 0 :
gpio_get_value(pdata->headset_gpio) > 0)) {
gpiod_get_value(pdata->headset_gpio) == 0 :
gpiod_get_value(pdata->headset_gpio) > 0)) {
printk("headset is out, HOOK status must discard\n");
goto out;
} else {
@@ -436,7 +436,7 @@ int rk_headset_adc_probe(struct platform_device *pdev,
if (pdata->headset_gpio) {
unsigned long irq_type;
headset->irq[HEADSET] = gpio_to_irq(pdata->headset_gpio);
headset->irq[HEADSET] = gpiod_to_irq(pdata->headset_gpio);
if (pdata->headset_insert_type == HEADSET_IN_HIGH)
irq_type = IRQF_TRIGGER_HIGH;
else

View File

@@ -41,7 +41,6 @@ static int rockchip_headset_probe(struct platform_device *pdev)
struct device_node *node = pdev->dev.of_node;
struct rk_headset_pdata *pdata;
int ret;
enum of_gpio_flags flags;
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (!pdata) {
@@ -51,33 +50,24 @@ static int rockchip_headset_probe(struct platform_device *pdev)
pdata_info = pdata;
/* headset */
ret = of_get_named_gpio_flags(node, "headset_gpio", 0, &flags);
if (ret < 0) {
pdata->headset_gpio = devm_gpiod_get(&pdev->dev, "headset", GPIOD_IN);
if (IS_ERR(pdata->headset_gpio)) {
dev_err(&pdev->dev, "Can not read property headset_gpio\n");
ret = PTR_ERR(pdata->headset_gpio);
goto err;
} else {
pdata->headset_gpio = ret;
ret = devm_gpio_request(&pdev->dev, pdata->headset_gpio,
"headset_gpio");
if (ret < 0) {
dev_err(&pdev->dev, "headset_gpio request fail\n");
goto err;
}
ret = gpio_direction_input(pdata->headset_gpio);
if (ret < 0) {
dev_err(&pdev->dev,
"headset_gpio set direction fail\n");
goto err;
}
pdata->headset_insert_type = (flags & OF_GPIO_ACTIVE_LOW) ?
pdata->headset_insert_type = gpiod_is_active_low(pdata->headset_gpio) ?
HEADSET_IN_LOW :
HEADSET_IN_HIGH;
}
/* hook */
ret = of_get_named_gpio_flags(node, "hook_gpio", 0, &pdata->hook_gpio);
if (ret < 0) {
pdata->hook_gpio = devm_gpiod_get_optional(&pdev->dev, "hook", GPIOD_IN);
if (IS_ERR(pdata->hook_gpio)) {
ret = PTR_ERR(pdata->hook_gpio);
goto err;
}
if (!pdata->hook_gpio) {
dev_warn(&pdev->dev, "Can not read property hook_gpio\n");
pdata->hook_gpio = 0;
/* adc mode */
pdata->chan = iio_channel_get(&pdev->dev, NULL);
if (IS_ERR(pdata->chan)) {
@@ -92,19 +82,6 @@ static int rockchip_headset_probe(struct platform_device *pdev)
"have not set hook_down_type,set >hook< insert type low level default\n");
pdata->hook_down_type = 0;
}
ret = devm_gpio_request(&pdev->dev, pdata->hook_gpio,
"hook_gpio");
if (ret < 0) {
dev_warn(&pdev->dev,
"devm_gpio_request hook_gpio request ERROR\n");
goto err;
}
ret = gpio_direction_input(pdata->hook_gpio);
if (ret < 0) {
dev_warn(&pdev->dev,
"gpio_direction_input hook_gpio set ERROR\n");
goto err;
}
}
#ifdef CONFIG_MODEM_MIC_SWITCH