Re: [PATCH v3] USB: PHY: Palmas USB Transceiver Driver

From: Kishon Vijay Abraham I
Date: Tue Mar 26 2013 - 02:04:20 EST


Hi,

On Monday 25 March 2013 03:16 PM, Laxman Dewangan wrote:
On Monday 25 March 2013 03:02 PM, Kishon Vijay Abraham I wrote:
From: Graeme Gregory <gg@xxxxxxxxxxxxxxx>

This is the driver for the OTG transceiver built into the Palmas chip. It
handles the various USB OTG events that can be generated by cable
insertion/removal.

Signed-off-by: Graeme Gregory <gg@xxxxxxxxxxxxxxx>
Signed-off-by: Moiz Sonasath <m-sonasath@xxxxxx>
Signed-off-by: Ruchika Kharwar <ruchika@xxxxxx>
Signed-off-by: Kishon Vijay Abraham I <kishon@xxxxxx>
Signed-off-by: Sebastien Guiriec <s-guiriec@xxxxxx>
---

I think this driver is more over the cable connection like vbus
detetcion or ID pin detection.
Then why not it is implemented based on extcon framework?

extcon framework uses notification mechanism and Felipe dint like using notification here. right Felipe?

That way, generic usb driver (like tegra_usb driver) will get
notification through extcon.

We need this cable detection through extcon on our tegra solution
through the Palmas.


+#include <linux/of.h>
+#include <linux/of_platform.h>
+
+static int palmas_usb_read(struct palmas *palmas, unsigned int reg,
+ unsigned int *dest)
+{
+ unsigned int addr;
+ int slave;
+
+ slave = PALMAS_BASE_TO_SLAVE(PALMAS_USB_OTG_BASE);
+ addr = PALMAS_BASE_TO_REG(PALMAS_USB_OTG_BASE, reg);
+
+ return regmap_read(palmas->regmap[slave], addr, dest);


Please use the generic api for palmas_read()/palmas_write(0 as it will
be ease on debugging on register access.
Direct regmap_read() does not help much on this.

Graeme,
Any reason why you dint use palmas_read()/palmas_write here?
Btw palmas_read()/palmas_write() internally uses regmap APIs.

+}
+
+static int palmas_usb_write(struct palmas *palmas, unsigned int reg,
+ unsigned int data)
+{
+ unsigned int addr;
+ int slave;
+
+ slave = PALMAS_BASE_TO_SLAVE(PALMAS_USB_OTG_BASE);
+ addr = PALMAS_BASE_TO_REG(PALMAS_USB_OTG_BASE, reg);
+
+ return regmap_write(palmas->regmap[slave], addr, data);

Same as above.



+
+ if (status != OMAP_DWC3_UNKNOWN) {
+ palmas_usb->linkstat = status;
+ palmas_usb->mailboxstat = dwc3_omap_mailbox(status);
Omap specific call, why? This is generic palma driver.

hmm.. I think we should either fall-back to the notification mechanism or have the client drivers pass function pointer here. Felipe?


+

+ palmas_usb->dev = &pdev->dev;
+
+ palmas_usb->irq1 = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_ID_OTG_IRQ);
+ palmas_usb->irq2 = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_ID_IRQ);
+ palmas_usb->irq3 = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_VBUS_OTG_IRQ);
+ palmas_usb->irq4 = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_VBUS_IRQ);

Should be come from platform_get_irq() through platform driver.

No. It can be obtained from regmap too.

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/