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
|
#endif
|
||||||
|
|
||||||
static int read_gpio(int gpio)
|
static int read_gpio(struct gpio_desc *gpio)
|
||||||
{
|
{
|
||||||
int i, level;
|
int i, level;
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
level = gpio_get_value(gpio);
|
level = gpiod_get_value(gpio);
|
||||||
if (level < 0) {
|
if (level < 0) {
|
||||||
pr_warn("%s:get pin level again,pin=%d,i=%d\n",
|
pr_warn("%s:get pin level again,pin=%d,i=%d\n",
|
||||||
__func__, gpio, i);
|
__func__, desc_to_gpio(gpio), i);
|
||||||
msleep(1);
|
msleep(1);
|
||||||
continue;
|
continue;
|
||||||
} else
|
} else
|
||||||
@@ -412,7 +412,7 @@ int rk_headset_probe(struct platform_device *pdev,
|
|||||||
register_early_suspend(&hs_early_suspend);
|
register_early_suspend(&hs_early_suspend);
|
||||||
#endif
|
#endif
|
||||||
if (pdata->headset_gpio) {
|
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)
|
if (pdata->headset_insert_type == HEADSET_IN_HIGH)
|
||||||
headset->irq_type[HEADSET] = IRQF_TRIGGER_RISING;
|
headset->irq_type[HEADSET] = IRQF_TRIGGER_RISING;
|
||||||
else
|
else
|
||||||
@@ -431,7 +431,7 @@ int rk_headset_probe(struct platform_device *pdev,
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
if (pdata->hook_gpio) {
|
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] =
|
headset->irq_type[HOOK] =
|
||||||
pdata->hook_down_type == HOOK_DOWN_HIGH ?
|
pdata->hook_down_type == HOOK_DOWN_HIGH ?
|
||||||
IRQF_TRIGGER_RISING :
|
IRQF_TRIGGER_RISING :
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
struct rk_headset_pdata {
|
struct rk_headset_pdata {
|
||||||
/* heaset about */
|
/* heaset about */
|
||||||
unsigned int headset_gpio;
|
struct gpio_desc *headset_gpio;
|
||||||
/* Headphones into the state level */
|
/* Headphones into the state level */
|
||||||
unsigned int headset_insert_type;
|
unsigned int headset_insert_type;
|
||||||
/* hook about */
|
/* hook about */
|
||||||
unsigned int hook_gpio;
|
struct gpio_desc *hook_gpio;
|
||||||
/* Hook key down status */
|
/* Hook key down status */
|
||||||
unsigned int hook_down_type;
|
unsigned int hook_down_type;
|
||||||
#ifdef CONFIG_MODEM_MIC_SWITCH
|
#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;
|
headset_info->heatset_irq_working = BUSY;
|
||||||
msleep(150);
|
msleep(150);
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
level = gpio_get_value(pdata->headset_gpio);
|
level = gpiod_get_value(pdata->headset_gpio);
|
||||||
if (level < 0) {
|
if (level < 0) {
|
||||||
pr_err("%s:get pin level again,pin=%d,i=%d\n",
|
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);
|
msleep(1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -134,7 +134,7 @@ static irqreturn_t headset_interrupt(int irq, void *dev_id)
|
|||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
pr_err("%s:get pin level again, pin=%d,i=%d\n",
|
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;
|
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 == BUSY ||
|
||||||
headset->heatset_irq_working == WAIT ||
|
headset->heatset_irq_working == WAIT ||
|
||||||
(pdata->headset_insert_type ?
|
(pdata->headset_insert_type ?
|
||||||
gpio_get_value(pdata->headset_gpio) == 0 :
|
gpiod_get_value(pdata->headset_gpio) == 0 :
|
||||||
gpio_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");
|
DBG("Headset is out or waiting for headset is in or out, after same time check HOOK key\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@@ -349,8 +349,8 @@ static void hook_work_callback(struct work_struct *work)
|
|||||||
headset->heatset_irq_working == BUSY ||
|
headset->heatset_irq_working == BUSY ||
|
||||||
headset->heatset_irq_working == WAIT ||
|
headset->heatset_irq_working == WAIT ||
|
||||||
(pdata->headset_insert_type ?
|
(pdata->headset_insert_type ?
|
||||||
gpio_get_value(pdata->headset_gpio) == 0 :
|
gpiod_get_value(pdata->headset_gpio) == 0 :
|
||||||
gpio_get_value(pdata->headset_gpio) > 0)) {
|
gpiod_get_value(pdata->headset_gpio) > 0)) {
|
||||||
printk("headset is out, HOOK status must discard\n");
|
printk("headset is out, HOOK status must discard\n");
|
||||||
goto out;
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
@@ -436,7 +436,7 @@ int rk_headset_adc_probe(struct platform_device *pdev,
|
|||||||
if (pdata->headset_gpio) {
|
if (pdata->headset_gpio) {
|
||||||
unsigned long irq_type;
|
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)
|
if (pdata->headset_insert_type == HEADSET_IN_HIGH)
|
||||||
irq_type = IRQF_TRIGGER_HIGH;
|
irq_type = IRQF_TRIGGER_HIGH;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ static int rockchip_headset_probe(struct platform_device *pdev)
|
|||||||
struct device_node *node = pdev->dev.of_node;
|
struct device_node *node = pdev->dev.of_node;
|
||||||
struct rk_headset_pdata *pdata;
|
struct rk_headset_pdata *pdata;
|
||||||
int ret;
|
int ret;
|
||||||
enum of_gpio_flags flags;
|
|
||||||
|
|
||||||
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
|
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
@@ -51,33 +50,24 @@ static int rockchip_headset_probe(struct platform_device *pdev)
|
|||||||
pdata_info = pdata;
|
pdata_info = pdata;
|
||||||
|
|
||||||
/* headset */
|
/* headset */
|
||||||
ret = of_get_named_gpio_flags(node, "headset_gpio", 0, &flags);
|
pdata->headset_gpio = devm_gpiod_get(&pdev->dev, "headset", GPIOD_IN);
|
||||||
if (ret < 0) {
|
if (IS_ERR(pdata->headset_gpio)) {
|
||||||
dev_err(&pdev->dev, "Can not read property headset_gpio\n");
|
dev_err(&pdev->dev, "Can not read property headset_gpio\n");
|
||||||
|
ret = PTR_ERR(pdata->headset_gpio);
|
||||||
goto err;
|
goto err;
|
||||||
} else {
|
} else {
|
||||||
pdata->headset_gpio = ret;
|
pdata->headset_insert_type = gpiod_is_active_low(pdata->headset_gpio) ?
|
||||||
ret = devm_gpio_request(&pdev->dev, pdata->headset_gpio,
|
HEADSET_IN_LOW :
|
||||||
"headset_gpio");
|
HEADSET_IN_HIGH;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
/* hook */
|
/* hook */
|
||||||
ret = of_get_named_gpio_flags(node, "hook_gpio", 0, &pdata->hook_gpio);
|
pdata->hook_gpio = devm_gpiod_get_optional(&pdev->dev, "hook", GPIOD_IN);
|
||||||
if (ret < 0) {
|
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");
|
dev_warn(&pdev->dev, "Can not read property hook_gpio\n");
|
||||||
pdata->hook_gpio = 0;
|
|
||||||
/* adc mode */
|
/* adc mode */
|
||||||
pdata->chan = iio_channel_get(&pdev->dev, NULL);
|
pdata->chan = iio_channel_get(&pdev->dev, NULL);
|
||||||
if (IS_ERR(pdata->chan)) {
|
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");
|
"have not set hook_down_type,set >hook< insert type low level default\n");
|
||||||
pdata->hook_down_type = 0;
|
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
|
#ifdef CONFIG_MODEM_MIC_SWITCH
|
||||||
|
|||||||
Reference in New Issue
Block a user