From: Kishon Vijay Abraham I <kishon@ti.com>
To: Mohit Kumar <mohit.kumar@st.com>, <arnd@arndb.de>
Cc: Pratyush Anand <pratyush.anand@st.com>,
Viresh Kumar <viresh.linux@gmail.com>, <spear-devel@list.st.com>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH V6 04/12] phy: st-miphy40lp: Add skeleton driver
Date: Tue, 11 Feb 2014 17:05:24 +0530 [thread overview]
Message-ID: <52FA0AFC.6030708@ti.com> (raw)
In-Reply-To: <850ed00862e7059e3973293131ba3c476b2d52cb.1392109054.git.mohit.kumar@st.com>
Hi,
On Tuesday 11 February 2014 03:00 PM, Mohit Kumar wrote:
> From: Pratyush Anand <pratyush.anand@st.com>
>
> ST miphy40lp supports PCIe, SATA and Super Speed USB. This driver adds
> skeleton support for the same.
>
> This skeleton defines function corresponding to phy ops as well as sleep
> pm ops. Any platform using this phy can add its own platform specific
> ops(if needed) corresponding to each phy ops.
>
> Phy specific modifications will require phy register space, which is
> passed from DT as a resource. Currently only SPEAr1310 and SPEAr1340 are
> known user of this phy, which do not need to modify phy registers
> normally. Therefore we have not retrieved phy base address from DT and
> hence not io-remapped it. However, same can be added in future if
> required.
>
> SoC specific modifications should be done in plat specific ops and phy
> specific modifications should be done in phy ops itself. As a general
> rule, follow the convention of modifying misc reg space in plat ops and
> phy reg space in phy ops.
>
> Signed-off-by: Pratyush Anand <pratyush.anand@st.com>
> Tested-by: Mohit Kumar <mohit.kumar@st.com>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Viresh Kumar <viresh.linux@gmail.com>
> Cc: Kishon Vijay Abraham I <kishon@ti.com>
> Cc: spear-devel@list.st.com
> Cc: linux-kernel@vger.kernel.org
> ---
> drivers/phy/Kconfig | 7 ++
> drivers/phy/Makefile | 1 +
> drivers/phy/phy-miphy40lp.c | 234 +++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 242 insertions(+), 0 deletions(-)
> create mode 100644 drivers/phy/phy-miphy40lp.c
>
> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
> index afa2354..ed5b4f3 100644
> --- a/drivers/phy/Kconfig
> +++ b/drivers/phy/Kconfig
> @@ -64,4 +64,11 @@ config BCM_KONA_USB2_PHY
> help
> Enable this to support the Broadcom Kona USB 2.0 PHY.
>
> +config PHY_ST_MIPHY40LP
> + tristate "ST MIPHY 40LP driver"
> + select GENERIC_PHY
> + help
> + Support for ST MIPHY 40LP which can be used for PCIe, SATA and Super Speed USB.
> + SPEAr13xx SoCs have used this PHY internally for PCIe and SATA implementation.
> +
> endmenu
> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
> index b57c253..c061091 100644
> --- a/drivers/phy/Makefile
> +++ b/drivers/phy/Makefile
> @@ -9,3 +9,4 @@ obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO) += phy-exynos-mipi-video.o
> obj-$(CONFIG_PHY_MVEBU_SATA) += phy-mvebu-sata.o
> obj-$(CONFIG_OMAP_USB2) += phy-omap-usb2.o
> obj-$(CONFIG_TWL4030_USB) += phy-twl4030-usb.o
> +obj-$(CONFIG_PHY_ST_MIPHY40LP) += phy-miphy40lp.o
> diff --git a/drivers/phy/phy-miphy40lp.c b/drivers/phy/phy-miphy40lp.c
> new file mode 100644
> index 0000000..98859ff
> --- /dev/null
> +++ b/drivers/phy/phy-miphy40lp.c
> @@ -0,0 +1,234 @@
> +/*
> + * ST MiPHY-40LP PHY driver
> + *
> + * Copyright (C) 2014 ST Microelectronics
> + * Pratyush Anand <pratyush.anand@st.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#include <linux/delay.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/kernel.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/phy/phy.h>
> +#include <linux/regmap.h>
> +
> +enum phy_mode {
miphy40lp_phy_mode?
> + SATA,
> + PCIE,
> + SS_USB,
> +};
> +
> +struct miphy40lp_priv;
> +
> +/* platform specific function struct */
> +struct miphy40lp_plat_ops {
> + int (*plat_init)(struct miphy40lp_priv *priv);
> + int (*plat_exit)(struct miphy40lp_priv *priv);
> + int (*plat_power_off)(struct miphy40lp_priv *priv);
> + int (*plat_power_on)(struct miphy40lp_priv *priv);
> + int (*plat_suspend)(struct miphy40lp_priv *priv);
> + int (*plat_resume)(struct miphy40lp_priv *priv);
> +};
> +
> +struct miphy40lp_priv {
> + /* regmap for any soc specific misc registers */
> + struct regmap *misc;
> + /* phy struct pointer */
> + struct phy *phy;
> + /* phy mode: 0 for SATA 1 for PCIe and 2 for SS-USB */
> + enum phy_mode mode;
> + /* instance id of this phy */
> + u32 id;
> + /* platform specific callbacks */
> + const struct miphy40lp_plat_ops *plat_ops;
> +};
> +
> +static int miphy40lp_init(struct phy *phy)
> +{
> + struct miphy40lp_priv *priv = phy_get_drvdata(phy);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_init)
> + ret = ops->plat_init(priv);
> +
> + return ret;
> +}
> +
> +static int miphy40lp_exit(struct phy *phy)
> +{
> + struct miphy40lp_priv *priv = phy_get_drvdata(phy);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_exit)
> + ret = ops->plat_exit(priv);
> +
> + return ret;
> +}
> +
> +static int miphy40lp_power_off(struct phy *phy)
> +{
> + struct miphy40lp_priv *priv = phy_get_drvdata(phy);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_init)
> + ret = ops->plat_init(priv);
plat_power_off here..
> +
> + return ret;
> +}
> +
> +static int miphy40lp_power_on(struct phy *phy)
> +{
> + struct miphy40lp_priv *priv = phy_get_drvdata(phy);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_power_on)
> + ret = ops->plat_power_on(priv);
> +
> + return ret;
> +}
> +
> +static const struct of_device_id miphy40lp_of_match[] = {
> + { .compatible = "st,miphy40lp-phy", .data = NULL },
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, miphy40lp_of_match);
> +
> +static struct phy_ops miphy40lp_ops = {
> + .init = miphy40lp_init,
> + .exit = miphy40lp_exit,
> + .power_off = miphy40lp_power_off,
> + .power_on = miphy40lp_power_on,
> + .owner = THIS_MODULE,
> +};
> +
> +#ifdef CONFIG_PM_SLEEP
> +static int miphy40lp_suspend(struct device *dev)
> +{
> + struct miphy40lp_priv *priv = dev_get_drvdata(dev);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_suspend)
> + ret = ops->plat_suspend(priv);
> +
> + return ret;
> +}
> +
> +static int miphy40lp_resume(struct device *dev)
> +{
> + struct miphy40lp_priv *priv = dev_get_drvdata(dev);
> + const struct miphy40lp_plat_ops *ops = priv->plat_ops;
> + int ret = 0;
> +
> + if (ops && ops->plat_resume)
> + ret = ops->plat_resume(priv);
> +
> + return ret;
> +}
> +#endif
> +
> +static SIMPLE_DEV_PM_OPS(miphy40lp_pm_ops, miphy40lp_suspend,
> + miphy40lp_resume);
> +
> +static struct phy *miphy40lp_xlate(struct device *dev,
> + struct of_phandle_args *args)
> +{
> + struct miphy40lp_priv *priv = dev_get_drvdata(dev);
> +
> + if (args->args_count < 1) {
> + dev_err(dev, "DT did not pass correct no of args\n");
> + return NULL;
> + }
> +
> + priv->mode = args->args[0];
Lets add error checking here if the mode is incorrect.
Thanks
Kishon
next prev parent reply other threads:[~2014-02-11 11:35 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-11 9:29 [PATCH V6 00/12]PCI:Add SPEAr13xx PCie support Mohit Kumar
2014-02-11 9:29 ` Mohit Kumar
2014-02-11 9:29 ` Mohit Kumar
2014-02-11 9:29 ` [PATCH V6 01/12] clk: SPEAr13XX: Fix pcie clock name Mohit Kumar
2014-02-11 9:29 ` [PATCH V6 02/12] SPEAr13XX: Fix static mapping table Mohit Kumar
2014-02-11 9:30 ` [PATCH V6 04/12] phy: st-miphy40lp: Add skeleton driver Mohit Kumar
2014-02-11 11:35 ` Kishon Vijay Abraham I [this message]
2014-02-11 11:44 ` Mohit KUMAR DCG
2014-02-11 9:30 ` [PATCH V6 06/12] SPEAr13xx: Fixup: Move SPEAr1340 SATA platform code to phy driver Mohit Kumar
2014-02-11 9:30 ` Mohit Kumar
2014-02-11 11:35 ` Kishon Vijay Abraham I
2014-02-11 11:35 ` Kishon Vijay Abraham I
2014-02-11 11:50 ` Mohit KUMAR DCG
2014-02-11 9:30 ` [PATCH V6 07/12] phy: st-miphy-40lp: Add SPEAr1310 and SPEAr1340 PCIe phy support Mohit Kumar
2014-02-11 9:30 ` Mohit Kumar
2014-02-11 12:06 ` Kishon Vijay Abraham I
2014-02-11 12:06 ` Kishon Vijay Abraham I
2014-02-12 4:07 ` Mohit KUMAR DCG
2014-02-12 4:07 ` Mohit KUMAR DCG
[not found] ` <cover.1392109054.git.mohit.kumar-qxv4g6HH51o@public.gmane.org>
2014-02-11 9:29 ` [PATCH V6 03/12] phy: st-miphy40lp: Add binding information Mohit Kumar
[not found] ` <af50da74226a244dfc05aed3dc9d28b896d166a4.1392109054.git.mohit.kumar-qxv4g6HH51o@public.gmane.org>
2014-02-12 18:20 ` Mark Rutland
[not found] ` <20140212182012.GC23630-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-02-13 5:19 ` Mohit KUMAR DCG
[not found] ` <2CC2A0A4A178534D93D5159BF3BCB66189FD2CAFB1-8vAmw3ZAcdzhJTuQ9jeba9BPR1lH4CV8@public.gmane.org>
2014-02-18 12:23 ` Mark Rutland
[not found] ` <20140218122324.GA23267-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-02-18 14:58 ` Arnd Bergmann
[not found] ` <201402181558.14663.arnd-r2nGTMty4D4@public.gmane.org>
2014-02-21 15:25 ` Mark Rutland
2014-02-11 9:30 ` [PATCH V6 05/12] SPEAr: misc: " Mohit Kumar
[not found] ` <bfddafffd103bef179fef717793bf94652742b85.1392109054.git.mohit.kumar-qxv4g6HH51o@public.gmane.org>
2014-02-12 18:21 ` Mark Rutland
[not found] ` <20140212182101.GD23630-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2014-02-13 5:25 ` Mohit KUMAR DCG
2014-02-11 9:30 ` [PATCH V6 08/12] SPEAr13xx: Add binding information for PCIe controller Mohit Kumar
2014-02-11 9:30 ` [PATCH V6 09/12] SPEAr13XX: dts: Add PCIe node information Mohit Kumar
2014-02-11 9:30 ` [PATCH V6 10/12] pcie: SPEAr13xx: Add designware wrapper support Mohit Kumar
2014-02-11 9:30 ` [PATCH V6 11/12] SPEAr13xx: defconfig: Update Mohit Kumar
2014-02-11 9:30 ` [PATCH V6 12/12] MAINTAINERS: Add ST SPEAr13xx PCIe driver maintainer Mohit Kumar
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=52FA0AFC.6030708@ti.com \
--to=kishon@ti.com \
--cc=arnd@arndb.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mohit.kumar@st.com \
--cc=pratyush.anand@st.com \
--cc=spear-devel@list.st.com \
--cc=viresh.linux@gmail.com \
/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.