Re: [PATCH v6 2/3] phy:phy-bcm-ns2-usbdrd:Broadcom USB DRD Phy driver for Northstar2
From: Kishon Vijay Abraham I
Date: Fri Jun 02 2017 - 07:59:04 EST
Hi,
On Friday 02 June 2017 05:21 PM, Raviteja Garimella wrote:
> Hi,
>
> On Fri, Jun 2, 2017 at 5:18 PM, Raviteja Garimella
> <raviteja.garimella@xxxxxxxxxxxx> wrote:
>> Hi Kishon,
>>
>> On Fri, Jun 2, 2017 at 3:59 PM, Kishon Vijay Abraham I <kishon@xxxxxx> wrote:
>>> Hi,
>>>
>>> On Wednesday 31 May 2017 03:42 PM, Raviteja Garimella wrote:
>>>> This is driver for USB DRD Phy used in Broadcom's Northstar2
>>>> SoC. The phy can be configured to be in Device mode or Host
>>>> mode based on the type of cable connected to the port. The
>>>> driver registers to extcon framework to get appropriate
>>>> connect events for Host/Device cables connect/disconnect
>>>> states based on VBUS and ID interrupts.
>>>>
>>>> Signed-off-by: Raviteja Garimella <raviteja.garimella@xxxxxxxxxxxx>
>>>> ---
>>>> drivers/phy/Kconfig | 13 ++
>>>> drivers/phy/Makefile | 1 +
>>>> drivers/phy/phy-bcm-ns2-usbdrd.c | 466 +++++++++++++++++++++++++++++++++++++++
>>>> 3 files changed, 480 insertions(+)
>>>> create mode 100644 drivers/phy/phy-bcm-ns2-usbdrd.c
>>>>
>>>> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
>>>> index afaf7b6..8028da7 100644
>>>> --- a/drivers/phy/Kconfig
>>>> +++ b/drivers/phy/Kconfig
>>>> @@ -507,6 +507,19 @@ config PHY_CYGNUS_PCIE
>>>> Enable this to support the Broadcom Cygnus PCIe PHY.
>>>> If unsure, say N.
>>>>
>>>> +config PHY_NS2_USB_DRD
>>>> + tristate "Broadcom Northstar2 USB DRD PHY support"
>>>> + depends on OF && (ARCH_BCM_IPROC || COMPILE_TEST)
>>>> + select GENERIC_PHY
>>>> + select EXTCON
>>>> + default ARCH_BCM_IPROC
>>>> + help
>>>> + Enable this to support the Broadcom Northstar2 USB DRD PHY.
>>>> + This driver initializes the PHY in either HOST or DEVICE mode.
>>>> + The host or device configuration is read from device tree.
>>>> +
>>>> + If unsure, say N.
>>>> +
>>>> source "drivers/phy/tegra/Kconfig"
>>>>
>>>> config PHY_NS2_PCIE
>>>> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
>>>> index f8047b4..e5fbb0e 100644
>>>> --- a/drivers/phy/Makefile
>>>> +++ b/drivers/phy/Makefile
>>>> @@ -61,6 +61,7 @@ obj-$(CONFIG_PHY_TUSB1210) += phy-tusb1210.o
>>>> obj-$(CONFIG_PHY_BRCM_SATA) += phy-brcm-sata.o
>>>> obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o
>>>> obj-$(CONFIG_PHY_CYGNUS_PCIE) += phy-bcm-cygnus-pcie.o
>>>> +obj-$(CONFIG_PHY_NS2_USB_DRD) += phy-bcm-ns2-usbdrd.o
>>>> obj-$(CONFIG_ARCH_TEGRA) += tegra/
>>>> obj-$(CONFIG_PHY_NS2_PCIE) += phy-bcm-ns2-pcie.o
>>>> obj-$(CONFIG_PHY_MESON8B_USB2) += phy-meson8b-usb2.o
>>>> diff --git a/drivers/phy/phy-bcm-ns2-usbdrd.c b/drivers/phy/phy-bcm-ns2-usbdrd.c
>>>> new file mode 100644
>>>> index 0000000..8e05c70
>>>> --- /dev/null
>>>> +++ b/drivers/phy/phy-bcm-ns2-usbdrd.c
>>>> @@ -0,0 +1,466 @@
>>>> +/*
>>>> + * Copyright (C) 2017 Broadcom
>>>> + *
>>>> + * 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 version 2.
>>>> + *
>>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>>> + * kind, whether express or implied; without even the implied warranty
>>>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>>> + * GNU General Public License for more details.
>>>> + */
>>>> +
>>>> +#include <linux/delay.h>
>>>> +#include <linux/extcon.h>
>>>> +#include <linux/gpio.h>
>>>> +#include <linux/gpio/consumer.h>
>>>> +#include <linux/init.h>
>>>> +#include <linux/interrupt.h>
>>>> +#include <linux/io.h>
>>>> +#include <linux/irq.h>
>>>> +#include <linux/mfd/syscon.h>
>>>> +#include <linux/module.h>
>>>> +#include <linux/of.h>
>>>> +#include <linux/of_address.h>
>>>> +#include <linux/phy/phy.h>
>>>> +#include <linux/platform_device.h>
>>>> +#include <linux/regmap.h>
>>>> +#include <linux/slab.h>
>>>> +#include <linux/workqueue.h>
>>>> +
>>>> +#define ICFG_DRD_AFE 0x0
>>>> +#define ICFG_MISC_STAT 0x18
>>>> +#define ICFG_DRD_P0CTL 0x1C
>>>> +#define ICFG_STRAP_CTRL 0x20
>>>> +#define ICFG_FSM_CTRL 0x24
>>>> +
>>>> +#define ICFG_DEV_BIT BIT(2)
>>>> +#define IDM_RST_BIT BIT(0)
>>>> +#define AFE_CORERDY_VDDC BIT(18)
>>>> +#define PHY_PLL_RESETB BIT(15)
>>>> +#define PHY_RESETB BIT(14)
>>>> +#define PHY_PLL_LOCK BIT(0)
>>>> +
>>>> +#define DRD_DEV_MODE BIT(20)
>>>> +#define OHCI_OVRCUR_POL BIT(11)
>>>> +#define ICFG_OFF_MODE BIT(6)
>>>> +#define PLL_LOCK_RETRY 1000
>>>> +
>>>> +#define EVT_DEVICE 0
>>>> +#define EVT_HOST 1
>>>> +
>>>> +#define DRD_HOST_MODE (BIT(2) | BIT(3))
>>>> +#define DRD_DEVICE_MODE (BIT(4) | BIT(5))
>>>> +#define DRD_HOST_VAL 0x803
>>>> +#define DRD_DEV_VAL 0x807
>>>> +#define GPIO_DELAY 20
>>>> +
>>>> +struct ns2_phy_data;
>>>> +struct ns2_phy_driver {
>>>> + void __iomem *icfgdrd_regs;
>>>> + void __iomem *idmdrd_rst_ctrl;
>>>> + void __iomem *crmu_usb2_ctrl;
>>>> + void __iomem *usb2h_strap_reg;
>>>> + struct ns2_phy_data *data;
>>>> + struct extcon_specific_cable_nb extcon_dev;
>>>> + struct extcon_specific_cable_nb extcon_host;
>>>
>>> The above two members are not used in the driver.
>>
>> Missed out to remove them. Will do.
>>
>>>> + struct extcon_dev *edev;
>>>
>>> Does USB DRD driver waits for extcon events? If not using extcon here is bogus.
>>
>> DRD driver uses extcon events to disconnect/connect gadget driver runtime.
>
> I meant USB Device controller driver. It's not capable of DRD.
all right. Btw which USB controller driver uses this?
-Kishon