summaryrefslogtreecommitdiff
path: root/drivers/platform
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-01-18 11:25:01 -0800
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:45 -0800
commit60402227ec71f254367526393b032ed974952d42 (patch)
treeccfdf9f63128ddd3e5c8af390b815ae4e0fd57fa /drivers/platform
parent8ee0110ce34e4cb4ce24754682afba2293f8557c (diff)
gpio-usbdetect: use gpio instead of irq
The current driver uses irq_read_line api which is not standard. Instead use a gpio and register for an interrupt when it changes states. And upon a change in state interrupt is received, read the gpio state to determine whether it is high or low. Change-Id: Ie4b1226cedfb44e65a84349da4b3eef5fe988dff Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/msm/gpio-usbdetect.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/platform/msm/gpio-usbdetect.c b/drivers/platform/msm/gpio-usbdetect.c
index af546eed5117..80e16573e0aa 100644
--- a/drivers/platform/msm/gpio-usbdetect.c
+++ b/drivers/platform/msm/gpio-usbdetect.c
@@ -18,6 +18,8 @@
#include <linux/slab.h>
#include <linux/of_platform.h>
#include <linux/interrupt.h>
+#include <linux/of_gpio.h>
+#include <linux/gpio.h>
#include <linux/power_supply.h>
#include <linux/regulator/consumer.h>
@@ -26,6 +28,7 @@ struct gpio_usbdetect {
struct regulator *vin;
struct power_supply *usb_psy;
int vbus_det_irq;
+ int gpio;
};
static irqreturn_t gpio_usbdetect_vbus_irq(int irq, void *data)
@@ -34,7 +37,7 @@ static irqreturn_t gpio_usbdetect_vbus_irq(int irq, void *data)
int vbus;
union power_supply_propval pval = {0,};
- vbus = !!irq_read_line(irq);
+ vbus = gpio_get_value(usb->gpio);
if (vbus)
pval.intval = POWER_SUPPLY_TYPE_USB;
else
@@ -87,7 +90,20 @@ static int gpio_usbdetect_probe(struct platform_device *pdev)
}
}
- usb->vbus_det_irq = platform_get_irq_byname(pdev, "vbus_det_irq");
+ usb->gpio = of_get_named_gpio(pdev->dev.of_node,
+ "qcom,vbus-det-gpio", 0);
+ if (usb->gpio < 0) {
+ dev_err(&pdev->dev, "Failed to get gpio: %d\n", usb->gpio);
+ return usb->gpio;
+ }
+
+ rc = gpio_request(usb->gpio, "vbus-det-gpio");
+ if (rc < 0) {
+ dev_err(&pdev->dev, "Failed to request gpio: %d\n", rc);
+ return rc;
+ }
+
+ usb->vbus_det_irq = gpio_to_irq(usb->gpio);
if (usb->vbus_det_irq < 0) {
if (usb->vin)
regulator_disable(usb->vin);