RE: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform
+ + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, phy_wkup); + phy-phy_wkup = ioremap(res-start, resource_size(res)); devm_ioremap? The phy_wakeup register is common across two instances of phy, devm_ioremap_resource() will fail to map for twice for same register space. I've already told you the register can't be shared between devices like this. BTW, you haven't replied to my request concerning your /proc/iomem contents... I have missed that specific mail. The /proc/iomem does show this common register. As you suggest to create a third device for this shared register? I agree it can be done. Initially I thought this should be part of control module, but do we have control module frame work for every SoC(am335x)? Every SoC has many such shared register to handle control/status logic for Soc specific IP(s)? If we create separate device node for each such registers, this will end up in adding more files to kernel. We should create single control module node for each SoC, cm: control_module@44e1 { compatible = ti,dsps-usbphy; reg = 0x44e10648 0x4 0x44e10XXX 0x4 reg-names = phy_wkup, mmc_control, xxxreg_ctrl, xxxreg_status; id = 0; }; Have common control module APIs to control these registers, can be used by other driver modules. -- Ravi B -- To unsubscribe from this list: send the line unsubscribe linux-usb in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform
Typo.. corrected The /proc/iomem does not show this common register -Original Message- From: linux-usb-ow...@vger.kernel.org [mailto:linux-usb-ow...@vger.kernel.org] On Behalf Of B, Ravi Sent: Wednesday, June 12, 2013 12:51 PM To: Sergei Shtylyov Cc: ABRAHAM, KISHON VIJAY; linux-usb@vger.kernel.org; linux-ker...@vger.kernel.org; Balbi, Felipe Subject: RE: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, phy_wkup); + phy-phy_wkup = ioremap(res-start, resource_size(res)); devm_ioremap? The phy_wakeup register is common across two instances of phy, devm_ioremap_resource() will fail to map for twice for same register space. I've already told you the register can't be shared between devices like this. BTW, you haven't replied to my request concerning your /proc/iomem contents... I have missed that specific mail. The /proc/iomem does not show this common register. As you suggest to create a third device for this shared register? I agree it can be done. Initially I thought this should be part of control module, but do we have control module frame work for every SoC(am335x)? Every SoC has many such shared register to handle control/status logic for Soc specific IP(s)? If we create separate device node for each such registers, this will end up in adding more files to kernel. We should create single control module node for each SoC, cm: control_module@44e1 { compatible = ti,dsps-usbphy; reg = 0x44e10648 0x4 0x44e10XXX 0x4 reg-names = phy_wkup, mmc_control, xxxreg_ctrl, xxxreg_status; id = 0; }; Have common control module APIs to control these registers, can be used by other driver modules. -- Ravi B -- To unsubscribe from this list: send the line unsubscribe linux-usb in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-usb in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform
Hi, On Tuesday 11 June 2013 12:47 PM, Ravi Babu wrote: Adds usb-phy driver support for am33xx platform, the host/device peripheral controller shall get this phy object to control the phy operations. Signed-off-by: Ravi Babu ravib...@ti.com --- drivers/usb/phy/Kconfig|9 ++ drivers/usb/phy/Makefile |1 + drivers/usb/phy/phy-dsps-usb.c | 236 3 files changed, 246 insertions(+), 0 deletions(-) create mode 100644 drivers/usb/phy/phy-dsps-usb.c diff --git a/drivers/usb/phy/Kconfig b/drivers/usb/phy/Kconfig index 372db48..b55c265 100644 --- a/drivers/usb/phy/Kconfig +++ b/drivers/usb/phy/Kconfig @@ -85,6 +85,15 @@ config OMAP_USB3 This driver interacts with the OMAP Control USB Driver to power on/off the PHY. +config DSPS_USB2PHY + tristate DSPS USB2 PHY Driver + depends on SOC_AM33XX + help + Enable this to support the transceiver that is part of SOC. This + phy supports all LS/FS/HS speed and also supports OTG functionality. + The USB OTG controller communicates with this phy through stand UTMI + interface. + config SAMSUNG_USBPHY tristate Samsung USB PHY Driver help diff --git a/drivers/usb/phy/Makefile b/drivers/usb/phy/Makefile index 33863c0..0b16fb3 100644 --- a/drivers/usb/phy/Makefile +++ b/drivers/usb/phy/Makefile @@ -17,6 +17,7 @@ obj-$(CONFIG_NOP_USB_XCEIV) += phy-nop.o obj-$(CONFIG_OMAP_CONTROL_USB)+= phy-omap-control.o obj-$(CONFIG_OMAP_USB2) += phy-omap-usb2.o obj-$(CONFIG_OMAP_USB3) += phy-omap-usb3.o +obj-$(CONFIG_DSPS_USB2PHY) += phy-dsps-usb.o obj-$(CONFIG_SAMSUNG_USBPHY) += phy-samsung-usb.o obj-$(CONFIG_SAMSUNG_USB2PHY) += phy-samsung-usb2.o obj-$(CONFIG_SAMSUNG_USB3PHY) += phy-samsung-usb3.o diff --git a/drivers/usb/phy/phy-dsps-usb.c b/drivers/usb/phy/phy-dsps-usb.c new file mode 100644 index 000..aae97b3 --- /dev/null +++ b/drivers/usb/phy/phy-dsps-usb.c @@ -0,0 +1,236 @@ +/* + * phy-dsps-usb.c - TI gs70 based usb phy driver used by usb controller + * + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include linux/module.h +#include linux/platform_device.h +#include linux/slab.h +#include linux/of.h +#include linux/io.h +#include linux/usb/omap_usb.h +#include linux/usb/phy_companion.h +#include linux/clk.h +#include linux/err.h +#include linux/pm_runtime.h +#include linux/delay.h +#include linux/usb/phy.h + +struct dsps_phy { + struct usb_phy phy; + struct device *dev; + struct platform_device *pdev; + void __iomem *phy_ctrl; + void __iomem *phy_wkup; + u8 is_suspended:1; + int id; +}; + +#define DSPS_USBPHY_CM_PWRDN (1 0) +#define DSPS_USBPHY_OTG_PWRDN (1 1) +#define DSPS_USBPHY_OTGVDET_EN (1 19) +#define DSPS_USBPHY_OTGSESSEND_EN (1 20) +#define DSPS_USB0_WKUP_CTRL_ENABLE (1 0) +#define DSPS_USB1_WKUP_CTRL_ENABLE (1 8) +#define phy_to_dspsphy(x) container_of((x), struct dsps_phy, phy) + +static void dsps_usbphy_power(struct usb_phy *phy, bool is_on) +{ + struct dsps_phy *dsps_phy = phy_to_dspsphy(phy); + u32 val; + + val = readl(dsps_phy-phy_ctrl); + + if (is_on) { + val = ~(DSPS_USBPHY_CM_PWRDN | DSPS_USBPHY_OTG_PWRDN); + val |= DSPS_USBPHY_OTGVDET_EN | + DSPS_USBPHY_OTGSESSEND_EN; + } else + val |= DSPS_USBPHY_CM_PWRDN | DSPS_USBPHY_OTG_PWRDN; + + writel(val, dsps_phy-phy_ctrl); +} + +static void dsps_usbphy_wakeup(struct usb_phy *phy, bool enable) +{ Where is this function called from? + struct dsps_phy *dsps_phy = phy_to_dspsphy(phy); + int id = dsps_phy-id; + u32 val, wkup_flag; + + val = readl(dsps_phy-phy_wkup); + wkup_flag = id ? DSPS_USB1_WKUP_CTRL_ENABLE : + DSPS_USB0_WKUP_CTRL_ENABLE; + + if (enable) + val |= wkup_flag; + else + val = ~wkup_flag; + + writel(val, dsps_phy-phy_wkup); +} + +static int dsps_usbphy_suspend(struct usb_phy *x, int suspend) +{ + struct dsps_phy *dsps_phy = phy_to_dspsphy(x); + + if (suspend) { + if (!pm_runtime_suspended(dsps_phy-pdev-dev)) + pm_runtime_put(dsps_phy-pdev-dev); + }
RE: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform
Kishon Cc: linux-usb@vger.kernel.org; linux-ker...@vger.kernel.org; Balbi, Felipe Subject: Re: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform + +res = platform_get_resource_byname(pdev, IORESOURCE_MEM, phy_wkup); +phy-phy_wkup = ioremap(res-start, resource_size(res)); devm_ioremap? The phy_wakeup register is common across two instances of phy, devm_ioremap_resource() will fail to map for twice for same register space. +if (IS_ERR(phy-phy_wkup)) +return PTR_ERR(phy-phy_wkup); + +if (np) +of_property_read_u32(np, id, phy-id); Is this property documented somewhere? Not it is not documented. + +phy-phy.dev= phy-dev; +phy-phy.label = dsps-usbphy; +dsps_usbphy_power(dsps_phy-phy, 0); +dsps_phy-is_suspended = 1; Are you using this is_suspended anywhere else? Currently not used. -- Ravi B -- To unsubscribe from this list: send the line unsubscribe linux-usb in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 2/7] usb: phy: dsps: adding usbphy driver for am33xx platform
Hello. On 06/11/2013 01:45 PM, B, Ravi wrote: + + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, phy_wkup); + phy-phy_wkup = ioremap(res-start, resource_size(res)); devm_ioremap? The phy_wakeup register is common across two instances of phy, devm_ioremap_resource() will fail to map for twice for same register space. I've already told you the register can't be shared between devices like this. BTW, you haven't replied to my request concerning your /proc/iomem contents... WBR, Sergei -- To unsubscribe from this list: send the line unsubscribe linux-usb in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html