rk_headset: switch to using gpiod API
Signed-off-by: Shunhua Lan <lsh@rock-chips.com> Change-Id: If159a1101956bb4e6f1ca439bab2ebaa19a39cb6
This commit is contained in:
@@ -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 :
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) ?
|
||||
HEADSET_IN_LOW :
|
||||
HEADSET_IN_HIGH;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user