All of lore.kernel.org
 help / color / mirror / Atom feed
From: areklis909@gmail.com (Arkadiusz Lis)
To: kernelnewbies@lists.kernelnewbies.org
Subject: GPIO consumer interface and DT
Date: Thu, 16 Aug 2018 00:11:02 +0200	[thread overview]
Message-ID: <20180815221102.GA4375@arek-VirtualBox> (raw)

Hi guys,
I'd like emxx_udc driver to start using gpio consumer interface. I
prepared draft of a patch and I have a question regarding obtaining gpio
descriptor.
So I use this:
devm_gpiod_get(struct device *dev, const char *con_id,
enum gpiod_flags flags), the second argument is con_id. What I learned
from Documentation/driver-api/gpio/board.rst is this string should be
equal to <function> prefix in <function>-gpios node in device tree.
For example: in file drivers/i2c/busses/i2c-gpio.c author gets gpio
descriptor with con_ids 'sda' and 'scl'. They are described in
Documentation/devicetree/bindings/i2c/i2c-gpio.txt as required
properties. 
In my case I didn't find bindings for emxx_udc driver and I don't know
what string should I insert:
gpiod = devm_gpiod_get(udc->dev, "DT_GPIOS_NAME", GPIOD_IN); //
"DT_GPIOS_NAME" is a placeholder

Do you know who defines bindings or how can I solve this issue? Maybe
I'm searching in the wrong direction and this is not how it should be
done? Comments and hints are very welcome

Thanks,
Arek
---

>From 2afe158b9793f614518b1897d6f67d74f92bc95e Mon Sep 17 00:00:00 2001
From: Arkadiusz Lis <areklis909@gmail.com>
Date: Wed, 15 Aug 2018 23:34:12 +0200
Subject: [PATCH] Staging: emxx_udc: start using gpio consumer interface

Remove usages of old linux/gpio.h interface, instead prefer
new linux/gpio/consumer.h
Obtain gpio descriptor in probe(), port getting gpio value
to more recent interface.

Signed-off-by: Arkadiusz Lis <areklis909@gmail.com>
---
 drivers/staging/emxx_udc/emxx_udc.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c
index 3e51476..fe8546a 100644
--- a/drivers/staging/emxx_udc/emxx_udc.c
+++ b/drivers/staging/emxx_udc/emxx_udc.c
@@ -27,7 +27,7 @@
 #include <linux/usb/gadget.h>
 
 #include <linux/irq.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 
 #include "emxx_udc.h"
 
@@ -57,7 +57,7 @@
 /*===========================================================================*/
 /* Global */
 struct nbu2ss_udc udc_controller;
-
+static struct gpio_desc *gpiod;
 /*-------------------------------------------------------------------------*/
 /* Read */
 static inline u32 _nbu2ss_readl(void *address)
@@ -2303,7 +2303,7 @@ static inline void _nbu2ss_check_vbus(struct nbu2ss_udc *udc)
 	mdelay(VBUS_CHATTERING_MDELAY);		/* wait (ms) */
 
 	/* VBUS ON Check*/
-	reg_dt = gpio_get_value(VBUS_VALUE);
+	reg_dt = gpiod_get_value(gpiod);
 	if (reg_dt == 0) {
 		udc->linux_suspended = 0;
 
@@ -2330,7 +2330,7 @@ static inline void _nbu2ss_check_vbus(struct nbu2ss_udc *udc)
 		}
 	} else {
 		mdelay(5);		/* wait (5ms) */
-		reg_dt = gpio_get_value(VBUS_VALUE);
+		reg_dt = gpiod_get_value(gpiod);
 		if (reg_dt == 0)
 			return;
 
@@ -2394,7 +2394,7 @@ static inline void _nbu2ss_int_usb_suspend(struct nbu2ss_udc *udc)
 	u32	reg_dt;
 
 	if (udc->usb_suspended == 0) {
-		reg_dt = gpio_get_value(VBUS_VALUE);
+		reg_dt = gpiod_get_value(gpiod);
 
 		if (reg_dt == 0)
 			return;
@@ -2434,7 +2434,7 @@ static irqreturn_t _nbu2ss_udc_irq(int irq, void *_udc)
 	struct nbu2ss_udc	*udc = (struct nbu2ss_udc *)_udc;
 	struct fc_regs	*preg = udc->p_regs;
 
-	if (gpio_get_value(VBUS_VALUE) == 0) {
+	if (gpiod_get_value(gpiod) == 0) {
 		_nbu2ss_writel(&preg->USB_INT_STA, ~USB_INT_STA_RW);
 		_nbu2ss_writel(&preg->USB_INT_ENA, 0);
 		return IRQ_HANDLED;
@@ -2443,7 +2443,7 @@ static irqreturn_t _nbu2ss_udc_irq(int irq, void *_udc)
 	spin_lock(&udc->lock);
 
 	for (;;) {
-		if (gpio_get_value(VBUS_VALUE) == 0) {
+		if (gpiod_get_value(gpiod) == 0) {
 			_nbu2ss_writel(&preg->USB_INT_STA, ~USB_INT_STA_RW);
 			_nbu2ss_writel(&preg->USB_INT_ENA, 0);
 			status = 0;
@@ -2852,7 +2852,7 @@ static int nbu2ss_ep_fifo_status(struct usb_ep *_ep)
 
 	preg = udc->p_regs;
 
-	data = gpio_get_value(VBUS_VALUE);
+	data = gpiod_get_value(gpiod);
 	if (data == 0)
 		return -EINVAL;
 
@@ -2896,7 +2896,7 @@ static void  nbu2ss_ep_fifo_flush(struct usb_ep *_ep)
 		return;
 	}
 
-	data = gpio_get_value(VBUS_VALUE);
+	data = gpiod_get_value(gpiod);
 	if (data == 0)
 		return;
 
@@ -2938,7 +2938,7 @@ static int nbu2ss_gad_get_frame(struct usb_gadget *pgadget)
 	}
 
 	udc = container_of(pgadget, struct nbu2ss_udc, gadget);
-	data = gpio_get_value(VBUS_VALUE);
+	data = gpiod_get_value(gpiod);
 	if (data == 0)
 		return -EINVAL;
 
@@ -2964,7 +2964,7 @@ static int nbu2ss_gad_wakeup(struct usb_gadget *pgadget)
 		return -EINVAL;
 	}
 
-	data = gpio_get_value(VBUS_VALUE);
+	data = gpiod_get_value(gpiod);
 	if (data == 0) {
 		dev_warn(&pgadget->dev, "VBUS LEVEL = %d\n", data);
 		return -EINVAL;
@@ -3224,6 +3224,11 @@ static int nbu2ss_drv_probe(struct platform_device *pdev)
 		return status;
 	}
 
+        gpiod = devm_gpiod_get(udc->dev, "DT_GPIOS_NAME", GPIOD_IN);
+        if(IS_ERR(gpiod)) {
+		dev_err(udc->dev, "failed to get gpio\n");
+		return PTR_ERR(gpiod);
+	}
 	/* Driver Initialization */
 	status = nbu2ss_drv_contest_init(pdev, udc);
 	if (status < 0) {
@@ -3314,7 +3319,7 @@ static int nbu2ss_drv_resume(struct platform_device *pdev)
 	if (!udc)
 		return 0;
 
-	data = gpio_get_value(VBUS_VALUE);
+	data = gpiod_get_value(gpiod);
 	if (data) {
 		udc->vbus_active = 1;
 		udc->devstate = USB_STATE_POWERED;
-- 
1.9.1

             reply	other threads:[~2018-08-15 22:11 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-15 22:11 Arkadiusz Lis [this message]
2018-08-16  6:39 ` GPIO consumer interface and DT Linus Walleij
2018-08-16  6:39   ` Linus Walleij
2018-08-16 19:07   ` Arkadiusz Lis
2018-08-16 19:07     ` Arkadiusz Lis
2018-08-20  7:30     ` Linus Walleij
2018-08-20  7:30       ` Linus Walleij

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180815221102.GA4375@arek-VirtualBox \
    --to=areklis909@gmail.com \
    --cc=kernelnewbies@lists.kernelnewbies.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.