linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs
@ 2013-09-28 19:27 Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

This patch series adds a simple driver for the Samsung S5P/Exynos SoC
series MIPI CSI-2 receiver (MIPI CSIS) and MIPI DSI transmitter (MIPI
DSIM) DPHYs, using the generic PHY framework. Previously the MIPI
CSIS and MIPI DSIM used a platform callback to control the PHY power
enable and reset bits. This non-generic platform code supporting only
limited set of SoCs is now removed.
This completes migration to the device tree of the Exynos/S5P MIPI CSI
slave device driver.

Changes since v4:
 - updated to the latest version of the generic PHY framework - removed
   PHY labels from the platform data structure. There is already no need
   for non-dt support in this PHY driver so the platform data where any
   struct phy_init_data would be passed is not added.

Changes since v3 (only patch 1/5):
 - replaced spin_(un)lock_irq_{save,restore} with spin_{lock,unlock}.
 - DT binding file renamed to samsung-phy.txt, so it can be used for
   other PHYs as well,
 - removed <linux/delay.h> inclusion,
 - added missing spin_lock_init().

Changes since v2:
 - adapted to the generic PHY API v9: use phy_set/get_drvdata(),
 - fixed of_xlate callback to return ERR_PTR() instead of NULL,
 - namespace cleanup, put "GPL v2" as MODULE_LICENSE, removed pr_debug,
 - removed phy id check in __set_phy_state().

Changes since v1:
 - enabled build as module and with CONFIG_OF disabled,
 - added phy_id enum,
 - of_address_to_resource() replaced with platform_get_resource(),
 - adapted to changes in the PHY API v7, v8 - added phy labels,
 - added MODULE_DEVICE_TABLE() entry,
 - the driver file renamed to phy-exynos-mipi-video.c,
 - changed DT compatible string to "samsung,s5pv210-mipi-video-phy",
 - corrected the compatible property's description.
 - patch 3/5 "video: exynos_dsi: Use generic PHY driver" replaced
   with a patch modifying the MIPI DSIM driver which is currently
   in mainline.

Sylwester Nawrocki (5):
  ARM: dts: Add MIPI PHY node to exynos4.dtsi
  phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs
  [media] exynos4-is: Use the generic MIPI CSIS PHY driver
  video: exynos_mipi_dsim: Use the generic PHY driver
  ARM: Samsung: Remove the MIPI PHY setup code

 .../devicetree/bindings/phy/samsung-phy.txt        |   14 ++
 arch/arm/boot/dts/exynos4.dtsi                     |   10 +
 arch/arm/mach-exynos/include/mach/regs-pmu.h       |    5 -
 arch/arm/mach-s5pv210/include/mach/regs-clock.h    |    4 -
 arch/arm/plat-samsung/Kconfig                      |    5 -
 arch/arm/plat-samsung/Makefile                     |    1 -
 arch/arm/plat-samsung/setup-mipiphy.c              |   60 -------
 drivers/media/platform/exynos4-is/Kconfig          |    2 +-
 drivers/media/platform/exynos4-is/mipi-csis.c      |   13 +-
 drivers/phy/Kconfig                                |    6 +
 drivers/phy/Makefile                               |    7 +-
 drivers/phy/phy-exynos-mipi-video.c                |  176 ++++++++++++++++++++
 drivers/video/exynos/Kconfig                       |    1 +
 drivers/video/exynos/exynos_mipi_dsi.c             |   19 +-
 include/linux/platform_data/mipi-csis.h            |    9 -
 include/video/exynos_mipi_dsim.h                   |    5 +-
 16 files changed, 234 insertions(+), 103 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/phy/samsung-phy.txt
 delete mode 100644 arch/arm/plat-samsung/setup-mipiphy.c
 create mode 100644 drivers/phy/phy-exynos-mipi-video.c

--
1.7.4.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
@ 2013-09-28 19:27 ` Sylwester Nawrocki
  2013-09-28 19:37   ` Sylwester Nawrocki
  2013-10-01  5:40   ` Kishon Vijay Abraham I
  2013-09-28 19:27 ` [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Sylwester Nawrocki
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Felipe Balbi <balbi@ti.com>
---
 arch/arm/boot/dts/exynos4.dtsi |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index caadc02..a73eeb5 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -49,6 +49,12 @@
 		reg = <0x10000000 0x100>;
 	};
 
+	mipi_phy: video-phy@10020710 {
+		compatible = "samsung,s5pv210-mipi-video-phy";
+		reg = <0x10020710 8>;
+		#phy-cells = <1>;
+	};
+
 	pd_mfc: mfc-power-domain@10023C40 {
 		compatible = "samsung,exynos4210-pd";
 		reg = <0x10023C40 0x20>;
@@ -161,6 +167,8 @@
 			clock-names = "csis", "sclk_csis";
 			bus-width = <4>;
 			samsung,power-domain = <&pd_cam>;
+			phys = <&mipi_phy 0>;
+			phy-names = "csis";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
@@ -174,6 +182,8 @@
 			clock-names = "csis", "sclk_csis";
 			bus-width = <2>;
 			samsung,power-domain = <&pd_cam>;
+			phys = <&mipi_phy 2>;
+			phy-names = "csis";
 			status = "disabled";
 			#address-cells = <1>;
 			#size-cells = <0>;
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs
  2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
@ 2013-09-28 19:27 ` Sylwester Nawrocki
  2013-09-28 19:35   ` Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 3/5] [media] exynos4-is: Use the generic MIPI CSIS PHY driver Sylwester Nawrocki
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

Add a PHY provider driver for the Samsung S5P/Exynos SoC MIPI CSI-2
receiver and MIPI DSI transmitter DPHYs.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
Changes since v4:
 - updated to latest version of the PHY framework - removed PHY
   labels.

The individual driver symbols in drivers/phy/Kconfig should
presumably be prefixed with, e.g. PHY_. This is something that
perhaps could be done as a follow up patch.
---
 .../devicetree/bindings/phy/samsung-phy.txt        |   14 ++
 drivers/phy/Kconfig                                |    6 +
 drivers/phy/Makefile                               |    7 +-
 drivers/phy/phy-exynos-mipi-video.c                |  176 ++++++++++++++++++++
 4 files changed, 200 insertions(+), 3 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/phy/samsung-phy.txt
 create mode 100644 drivers/phy/phy-exynos-mipi-video.c

diff --git a/Documentation/devicetree/bindings/phy/samsung-phy.txt b/Documentation/devicetree/bindings/phy/samsung-phy.txt
new file mode 100644
index 0000000..5ff208c
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/samsung-phy.txt
@@ -0,0 +1,14 @@
+Samsung S5P/EXYNOS SoC series MIPI CSIS/DSIM DPHY
+-------------------------------------------------
+
+Required properties:
+- compatible : should be "samsung,s5pv210-mipi-video-phy";
+- reg : offset and length of the MIPI DPHY register set;
+- #phy-cells : from the generic phy bindings, must be 1;
+
+For "samsung,s5pv210-mipi-video-phy" compatible PHYs the second cell in
+the PHY specifier identifies the PHY and its meaning is as follows:
+  0 - MIPI CSIS 0,
+  1 - MIPI DSIM 0,
+  2 - MIPI CSIS 1,
+  3 - MIPI DSIM 1.
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index ac239ac..0062d7e 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -15,6 +15,12 @@ config GENERIC_PHY
 	  phy users can obtain reference to the PHY. All the users of this
 	  framework should select this config.
 
+config PHY_EXYNOS_MIPI_VIDEO
+	tristate "S5P/EXYNOS SoC series MIPI CSI-2/DSI PHY driver"
+	help
+	  Support for MIPI CSI-2 and MIPI DSI DPHY found on Samsung S5P
+	  and EXYNOS SoCs.
+
 config OMAP_USB2
 	tristate "OMAP USB2 PHY Driver"
 	depends on ARCH_OMAP2PLUS
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index 0dd8a98..6344053 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -2,6 +2,7 @@
 # Makefile for the phy drivers.
 #
 
-obj-$(CONFIG_GENERIC_PHY)	+= phy-core.o
-obj-$(CONFIG_OMAP_USB2)		+= phy-omap-usb2.o
-obj-$(CONFIG_TWL4030_USB)	+= phy-twl4030-usb.o
+obj-$(CONFIG_GENERIC_PHY)		+= phy-core.o
+obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO)	+= phy-exynos-mipi-video.o
+obj-$(CONFIG_OMAP_USB2)			+= phy-omap-usb2.o
+obj-$(CONFIG_TWL4030_USB)		+= phy-twl4030-usb.o
diff --git a/drivers/phy/phy-exynos-mipi-video.c b/drivers/phy/phy-exynos-mipi-video.c
new file mode 100644
index 0000000..b73b86a
--- /dev/null
+++ b/drivers/phy/phy-exynos-mipi-video.c
@@ -0,0 +1,176 @@
+/*
+ * Samsung S5P/EXYNOS SoC series MIPI CSIS/DSIM DPHY driver
+ *
+ * Copyright (C) 2013 Samsung Electronics Co., Ltd.
+ * Author: Sylwester Nawrocki <s.nawrocki@samsung.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/io.h>
+#include <linux/kernel.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/spinlock.h>
+
+/* MIPI_PHYn_CONTROL register offset: n = 0..1 */
+#define EXYNOS_MIPI_PHY_CONTROL(n)	((n) * 4)
+#define EXYNOS_MIPI_PHY_ENABLE		(1 << 0)
+#define EXYNOS_MIPI_PHY_SRESETN		(1 << 1)
+#define EXYNOS_MIPI_PHY_MRESETN		(1 << 2)
+#define EXYNOS_MIPI_PHY_RESET_MASK	(3 << 1)
+
+enum exynos_mipi_phy_id {
+	EXYNOS_MIPI_PHY_ID_CSIS0,
+	EXYNOS_MIPI_PHY_ID_DSIM0,
+	EXYNOS_MIPI_PHY_ID_CSIS1,
+	EXYNOS_MIPI_PHY_ID_DSIM1,
+	EXYNOS_MIPI_PHYS_NUM
+};
+
+#define is_mipi_dsim_phy_id(id) \
+	((id) = EXYNOS_MIPI_PHY_ID_DSIM0 || (id) = EXYNOS_MIPI_PHY_ID_DSIM1)
+
+struct exynos_mipi_video_phy {
+	spinlock_t slock;
+	struct video_phy_desc {
+		struct phy *phy;
+		unsigned int index;
+	} phys[EXYNOS_MIPI_PHYS_NUM];
+	void __iomem *regs;
+};
+
+static int __set_phy_state(struct exynos_mipi_video_phy *state,
+			enum exynos_mipi_phy_id id, unsigned int on)
+{
+	void __iomem *addr;
+	u32 reg, reset;
+
+	addr = state->regs + EXYNOS_MIPI_PHY_CONTROL(id / 2);
+
+	if (is_mipi_dsim_phy_id(id))
+		reset = EXYNOS_MIPI_PHY_MRESETN;
+	else
+		reset = EXYNOS_MIPI_PHY_SRESETN;
+
+	spin_lock(&state->slock);
+	reg = readl(addr);
+	if (on)
+		reg |= reset;
+	else
+		reg &= ~reset;
+	writel(reg, addr);
+
+	/* Clear ENABLE bit only if MRESETN, SRESETN bits are not set. */
+	if (on)
+		reg |= EXYNOS_MIPI_PHY_ENABLE;
+	else if (!(reg & EXYNOS_MIPI_PHY_RESET_MASK))
+		reg &= ~EXYNOS_MIPI_PHY_ENABLE;
+
+	writel(reg, addr);
+	spin_unlock(&state->slock);
+	return 0;
+}
+
+#define to_mipi_video_phy(desc) \
+	container_of((desc), struct exynos_mipi_video_phy, phys[(desc)->index]);
+
+static int exynos_mipi_video_phy_power_on(struct phy *phy)
+{
+	struct video_phy_desc *phy_desc = phy_get_drvdata(phy);
+	struct exynos_mipi_video_phy *state = to_mipi_video_phy(phy_desc);
+
+	return __set_phy_state(state, phy_desc->index, 1);
+}
+
+static int exynos_mipi_video_phy_power_off(struct phy *phy)
+{
+	struct video_phy_desc *phy_desc = phy_get_drvdata(phy);
+	struct exynos_mipi_video_phy *state = to_mipi_video_phy(phy_desc);
+
+	return __set_phy_state(state, phy_desc->index, 1);
+}
+
+static struct phy *exynos_mipi_video_phy_xlate(struct device *dev,
+					struct of_phandle_args *args)
+{
+	struct exynos_mipi_video_phy *state = dev_get_drvdata(dev);
+
+	if (WARN_ON(args->args[0] > EXYNOS_MIPI_PHYS_NUM))
+		return ERR_PTR(-ENODEV);
+
+	return state->phys[args->args[0]].phy;
+}
+
+static struct phy_ops exynos_mipi_video_phy_ops = {
+	.power_on	= exynos_mipi_video_phy_power_on,
+	.power_off	= exynos_mipi_video_phy_power_off,
+	.owner		= THIS_MODULE,
+};
+
+static int exynos_mipi_video_phy_probe(struct platform_device *pdev)
+{
+	struct exynos_mipi_video_phy *state;
+	struct device *dev = &pdev->dev;
+	struct resource *res;
+	struct phy_provider *phy_provider;
+	unsigned int i;
+
+	state = devm_kzalloc(dev, sizeof(*state), GFP_KERNEL);
+	if (!state)
+		return -ENOMEM;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+	state->regs = devm_ioremap_resource(dev, res);
+	if (IS_ERR(state->regs))
+		return PTR_ERR(state->regs);
+
+	dev_set_drvdata(dev, state);
+	spin_lock_init(&state->slock);
+
+	phy_provider = devm_of_phy_provider_register(dev,
+					exynos_mipi_video_phy_xlate);
+	if (IS_ERR(phy_provider))
+		return PTR_ERR(phy_provider);
+
+	for (i = 0; i < EXYNOS_MIPI_PHYS_NUM; i++) {
+		struct phy *phy = devm_phy_create(dev,
+					&exynos_mipi_video_phy_ops, NULL);
+		if (IS_ERR(phy)) {
+			dev_err(dev, "failed to create PHY %d\n", i);
+			return PTR_ERR(phy);
+		}
+
+		state->phys[i].phy = phy;
+		state->phys[i].index = i;
+		phy_set_drvdata(phy, &state->phys[i]);
+	}
+
+	return 0;
+}
+
+static const struct of_device_id exynos_mipi_video_phy_of_match[] = {
+	{ .compatible = "samsung,s5pv210-mipi-video-phy" },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, exynos_mipi_video_phy_of_match);
+
+static struct platform_driver exynos_mipi_video_phy_driver = {
+	.probe	= exynos_mipi_video_phy_probe,
+	.driver = {
+		.of_match_table	= exynos_mipi_video_phy_of_match,
+		.name  = "exynos-mipi-video-phy",
+		.owner = THIS_MODULE,
+	}
+};
+module_platform_driver(exynos_mipi_video_phy_driver);
+
+MODULE_DESCRIPTION("Samsung S5P/EXYNOS SoC MIPI CSI-2/DSI PHY driver");
+MODULE_AUTHOR("Sylwester Nawrocki <s.nawrocki@samsung.com>");
+MODULE_LICENSE("GPL v2");
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V5 3/5] [media] exynos4-is: Use the generic MIPI CSIS PHY driver
  2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Sylwester Nawrocki
@ 2013-09-28 19:27 ` Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic " Sylwester Nawrocki
  2013-09-28 19:27 ` [PATCH V5 5/5] ARM: Samsung: Remove the MIPI PHY setup code Sylwester Nawrocki
  4 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

Use the generic PHY API instead of the platform callback
to control the MIPI CSIS DPHY.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Acked-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
Changes since v4:
 - updated to latest version of the PHY framework - removed PHY
   labels.
---
 drivers/media/platform/exynos4-is/Kconfig     |    2 +-
 drivers/media/platform/exynos4-is/mipi-csis.c |   13 ++++++++++---
 include/linux/platform_data/mipi-csis.h       |    9 ---------
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/exynos4-is/Kconfig b/drivers/media/platform/exynos4-is/Kconfig
index 53ad0f0..d2d3b4b 100644
--- a/drivers/media/platform/exynos4-is/Kconfig
+++ b/drivers/media/platform/exynos4-is/Kconfig
@@ -29,7 +29,7 @@ config VIDEO_S5P_FIMC
 config VIDEO_S5P_MIPI_CSIS
 	tristate "S5P/EXYNOS MIPI-CSI2 receiver (MIPI-CSIS) driver"
 	depends on REGULATOR
-	select S5P_SETUP_MIPIPHY
+	select GENERIC_PHY
 	help
 	  This is a V4L2 driver for Samsung S5P and EXYNOS4 SoC MIPI-CSI2
 	  receiver (MIPI-CSIS) devices.
diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c
index 0914230..9fc2af6 100644
--- a/drivers/media/platform/exynos4-is/mipi-csis.c
+++ b/drivers/media/platform/exynos4-is/mipi-csis.c
@@ -20,6 +20,7 @@
 #include <linux/memory.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/phy/phy.h>
 #include <linux/platform_data/mipi-csis.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
@@ -180,6 +181,7 @@ struct csis_drvdata {
  * @sd: v4l2_subdev associated with CSIS device instance
  * @index: the hardware instance index
  * @pdev: CSIS platform device
+ * @phy: pointer to the CSIS generic PHY
  * @regs: mmaped I/O registers memory
  * @supplies: CSIS regulator supplies
  * @clock: CSIS clocks
@@ -203,6 +205,7 @@ struct csis_state {
 	struct v4l2_subdev sd;
 	u8 index;
 	struct platform_device *pdev;
+	struct phy *phy;
 	void __iomem *regs;
 	struct regulator_bulk_data supplies[CSIS_NUM_SUPPLIES];
 	struct clk *clock[NUM_CSIS_CLOCKS];
@@ -779,8 +782,8 @@ static int s5pcsis_parse_dt(struct platform_device *pdev,
 					"samsung,csis-wclk");
 
 	state->num_lanes = endpoint.bus.mipi_csi2.num_data_lanes;
-
 	of_node_put(node);
+
 	return 0;
 }
 #else
@@ -829,6 +832,10 @@ static int s5pcsis_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
+	state->phy = devm_phy_get(dev, "csis");
+	if (IS_ERR(state->phy))
+		return PTR_ERR(state->phy);
+
 	mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	state->regs = devm_ioremap_resource(dev, mem_res);
 	if (IS_ERR(state->regs))
@@ -922,7 +929,7 @@ static int s5pcsis_pm_suspend(struct device *dev, bool runtime)
 	mutex_lock(&state->lock);
 	if (state->flags & ST_POWERED) {
 		s5pcsis_stop_stream(state);
-		ret = s5p_csis_phy_enable(state->index, false);
+		ret = phy_power_off(state->phy);
 		if (ret)
 			goto unlock;
 		ret = regulator_bulk_disable(CSIS_NUM_SUPPLIES,
@@ -958,7 +965,7 @@ static int s5pcsis_pm_resume(struct device *dev, bool runtime)
 					    state->supplies);
 		if (ret)
 			goto unlock;
-		ret = s5p_csis_phy_enable(state->index, true);
+		ret = phy_power_on(state->phy);
 		if (!ret) {
 			state->flags |= ST_POWERED;
 		} else {
diff --git a/include/linux/platform_data/mipi-csis.h b/include/linux/platform_data/mipi-csis.h
index bf34e17..c2fd902 100644
--- a/include/linux/platform_data/mipi-csis.h
+++ b/include/linux/platform_data/mipi-csis.h
@@ -25,13 +25,4 @@ struct s5p_platform_mipi_csis {
 	u8 hs_settle;
 };
 
-/**
- * s5p_csis_phy_enable - global MIPI-CSI receiver D-PHY control
- * @id:     MIPI-CSIS harware instance index (0...1)
- * @on:     true to enable D-PHY and deassert its reset
- *          false to disable D-PHY
- * @return: 0 on success, or negative error code on failure
- */
-int s5p_csis_phy_enable(int id, bool on);
-
 #endif /* __PLAT_SAMSUNG_MIPI_CSIS_H_ */
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic PHY driver
  2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
                   ` (2 preceding siblings ...)
  2013-09-28 19:27 ` [PATCH V5 3/5] [media] exynos4-is: Use the generic MIPI CSIS PHY driver Sylwester Nawrocki
@ 2013-09-28 19:27 ` Sylwester Nawrocki
  2013-10-09  8:32   ` Tomi Valkeinen
  2013-09-28 19:27 ` [PATCH V5 5/5] ARM: Samsung: Remove the MIPI PHY setup code Sylwester Nawrocki
  4 siblings, 1 reply; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

Use the generic PHY API instead of the platform callback
for the MIPI DSIM DPHY enable/reset control.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Acked-by: Donghwa Lee <dh09.lee@samsung.com>
---
Changes since v4:
 - PHY label removed from the platform data structure.
---
 drivers/video/exynos/Kconfig           |    1 +
 drivers/video/exynos/exynos_mipi_dsi.c |   19 ++++++++++---------
 include/video/exynos_mipi_dsim.h       |    5 ++---
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/drivers/video/exynos/Kconfig b/drivers/video/exynos/Kconfig
index 1b035b2..976594d 100644
--- a/drivers/video/exynos/Kconfig
+++ b/drivers/video/exynos/Kconfig
@@ -16,6 +16,7 @@ if EXYNOS_VIDEO
 config EXYNOS_MIPI_DSI
 	bool "EXYNOS MIPI DSI driver support."
 	depends on ARCH_S5PV210 || ARCH_EXYNOS
+	select GENERIC_PHY
 	help
 	  This enables support for MIPI-DSI device.

diff --git a/drivers/video/exynos/exynos_mipi_dsi.c b/drivers/video/exynos/exynos_mipi_dsi.c
index 32e5406..00b3a52 100644
--- a/drivers/video/exynos/exynos_mipi_dsi.c
+++ b/drivers/video/exynos/exynos_mipi_dsi.c
@@ -30,6 +30,7 @@
 #include <linux/interrupt.h>
 #include <linux/kthread.h>
 #include <linux/notifier.h>
+#include <linux/phy/phy.h>
 #include <linux/regulator/consumer.h>
 #include <linux/pm_runtime.h>
 #include <linux/err.h>
@@ -156,8 +157,7 @@ static int exynos_mipi_dsi_blank_mode(struct mipi_dsim_device *dsim, int power)
 		exynos_mipi_regulator_enable(dsim);

 		/* enable MIPI-DSI PHY. */
-		if (dsim->pd->phy_enable)
-			dsim->pd->phy_enable(pdev, true);
+		phy_power_on(dsim->phy);

 		clk_enable(dsim->clock);

@@ -373,6 +373,10 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
 		return ret;
 	}

+	dsim->phy = devm_phy_get(&pdev->dev, "dsim");
+	if (IS_ERR(dsim->phy))
+		return PTR_ERR(dsim->phy);
+
 	dsim->clock = devm_clk_get(&pdev->dev, "dsim0");
 	if (IS_ERR(dsim->clock)) {
 		dev_err(&pdev->dev, "failed to get dsim clock source\n");
@@ -439,8 +443,7 @@ static int exynos_mipi_dsi_probe(struct platform_device *pdev)
 	exynos_mipi_regulator_enable(dsim);

 	/* enable MIPI-DSI PHY. */
-	if (dsim->pd->phy_enable)
-		dsim->pd->phy_enable(pdev, true);
+	phy_power_on(dsim->phy);

 	exynos_mipi_update_cfg(dsim);

@@ -504,9 +507,8 @@ static int exynos_mipi_dsi_suspend(struct device *dev)
 	if (client_drv && client_drv->suspend)
 		client_drv->suspend(client_dev);

-	/* enable MIPI-DSI PHY. */
-	if (dsim->pd->phy_enable)
-		dsim->pd->phy_enable(pdev, false);
+	/* disable MIPI-DSI PHY. */
+	phy_power_off(dsim->phy);

 	clk_disable(dsim->clock);

@@ -536,8 +538,7 @@ static int exynos_mipi_dsi_resume(struct device *dev)
 	exynos_mipi_regulator_enable(dsim);

 	/* enable MIPI-DSI PHY. */
-	if (dsim->pd->phy_enable)
-		dsim->pd->phy_enable(pdev, true);
+	phy_power_on(dsim->phy);

 	clk_enable(dsim->clock);

diff --git a/include/video/exynos_mipi_dsim.h b/include/video/exynos_mipi_dsim.h
index 89dc88a..6a578f8 100644
--- a/include/video/exynos_mipi_dsim.h
+++ b/include/video/exynos_mipi_dsim.h
@@ -216,6 +216,7 @@ struct mipi_dsim_config {
  *	automatically.
  * @e_clk_src: select byte clock source.
  * @pd: pointer to MIPI-DSI driver platform data.
+ * @phy: pointer to the MIPI-DSI PHY
  */
 struct mipi_dsim_device {
 	struct device			*dev;
@@ -236,6 +237,7 @@ struct mipi_dsim_device {
 	bool				suspended;

 	struct mipi_dsim_platform_data	*pd;
+	struct phy			*phy;
 };

 /*
@@ -248,7 +250,6 @@ struct mipi_dsim_device {
  * @enabled: indicate whether mipi controller got enabled or not.
  * @lcd_panel_info: pointer for lcd panel specific structure.
  *	this structure specifies width, height, timing and polarity and so on.
- * @phy_enable: pointer to a callback controlling D-PHY enable/reset
  */
 struct mipi_dsim_platform_data {
 	char				lcd_panel_name[PANEL_NAME_SIZE];
@@ -256,8 +257,6 @@ struct mipi_dsim_platform_data {
 	struct mipi_dsim_config		*dsim_config;
 	unsigned int			enabled;
 	void				*lcd_panel_info;
-
-	int (*phy_enable)(struct platform_device *pdev, bool on);
 };

 /*
--
1.7.4.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH V5 5/5] ARM: Samsung: Remove the MIPI PHY setup code
  2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
                   ` (3 preceding siblings ...)
  2013-09-28 19:27 ` [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic " Sylwester Nawrocki
@ 2013-09-28 19:27 ` Sylwester Nawrocki
  4 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:27 UTC (permalink / raw)
  To: linux-arm-kernel

Generic PHY drivers are used to handle the MIPI CSIS and MIPI DSIM
DPHYs so we can remove now unused code at arch/arm/plat-samsung.
In case there is any board file for S5PV210 platforms using MIPI
CSIS/DSIM (not any upstream currently) it should use the generic
PHY API to bind the PHYs to respective PHY consumer drivers and
a platform device for the PHY provider should be defined.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Felipe Balbi <balbi@ti.com>
Acked-by: Kukjin Kim <kgene.kim@samsung.com>
---
 arch/arm/mach-exynos/include/mach/regs-pmu.h    |    5 --
 arch/arm/mach-s5pv210/include/mach/regs-clock.h |    4 --
 arch/arm/plat-samsung/Kconfig                   |    5 --
 arch/arm/plat-samsung/Makefile                  |    1 -
 arch/arm/plat-samsung/setup-mipiphy.c           |   60 -----------------------
 5 files changed, 0 insertions(+), 75 deletions(-)
 delete mode 100644 arch/arm/plat-samsung/setup-mipiphy.c

diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h
index 57344b7..2cdb63e 100644
--- a/arch/arm/mach-exynos/include/mach/regs-pmu.h
+++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h
@@ -44,11 +44,6 @@
 #define S5P_DAC_PHY_CONTROL			S5P_PMUREG(0x070C)
 #define S5P_DAC_PHY_ENABLE			(1 << 0)
 
-#define S5P_MIPI_DPHY_CONTROL(n)		S5P_PMUREG(0x0710 + (n) * 4)
-#define S5P_MIPI_DPHY_ENABLE			(1 << 0)
-#define S5P_MIPI_DPHY_SRESETN			(1 << 1)
-#define S5P_MIPI_DPHY_MRESETN			(1 << 2)
-
 #define S5P_INFORM0				S5P_PMUREG(0x0800)
 #define S5P_INFORM1				S5P_PMUREG(0x0804)
 #define S5P_INFORM2				S5P_PMUREG(0x0808)
diff --git a/arch/arm/mach-s5pv210/include/mach/regs-clock.h b/arch/arm/mach-s5pv210/include/mach/regs-clock.h
index 032de66..e345584 100644
--- a/arch/arm/mach-s5pv210/include/mach/regs-clock.h
+++ b/arch/arm/mach-s5pv210/include/mach/regs-clock.h
@@ -147,10 +147,6 @@
 #define S5P_HDMI_PHY_CONTROL	S5P_CLKREG(0xE804)
 #define S5P_USB_PHY_CONTROL	S5P_CLKREG(0xE80C)
 #define S5P_DAC_PHY_CONTROL	S5P_CLKREG(0xE810)
-#define S5P_MIPI_DPHY_CONTROL(x) S5P_CLKREG(0xE814)
-#define S5P_MIPI_DPHY_ENABLE	(1 << 0)
-#define S5P_MIPI_DPHY_SRESETN	(1 << 1)
-#define S5P_MIPI_DPHY_MRESETN	(1 << 2)
 
 #define S5P_INFORM0		S5P_CLKREG(0xF000)
 #define S5P_INFORM1		S5P_CLKREG(0xF004)
diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig
index 7dfba93..ec882ad 100644
--- a/arch/arm/plat-samsung/Kconfig
+++ b/arch/arm/plat-samsung/Kconfig
@@ -395,11 +395,6 @@ config S3C24XX_PWM
 	  Support for exporting the PWM timer blocks via the pwm device
 	  system
 
-config S5P_SETUP_MIPIPHY
-	bool
-	help
-	  Compile in common setup code for MIPI-CSIS and MIPI-DSIM devices
-
 config S3C_SETUP_CAMIF
 	bool
 	help
diff --git a/arch/arm/plat-samsung/Makefile b/arch/arm/plat-samsung/Makefile
index 498c7c2..9267d29 100644
--- a/arch/arm/plat-samsung/Makefile
+++ b/arch/arm/plat-samsung/Makefile
@@ -38,7 +38,6 @@ obj-$(CONFIG_S5P_DEV_UART)	+= s5p-dev-uart.o
 obj-$(CONFIG_SAMSUNG_DEV_BACKLIGHT)	+= dev-backlight.o
 
 obj-$(CONFIG_S3C_SETUP_CAMIF)	+= setup-camif.o
-obj-$(CONFIG_S5P_SETUP_MIPIPHY)	+= setup-mipiphy.o
 
 # DMA support
 
diff --git a/arch/arm/plat-samsung/setup-mipiphy.c b/arch/arm/plat-samsung/setup-mipiphy.c
deleted file mode 100644
index 66df315..0000000
--- a/arch/arm/plat-samsung/setup-mipiphy.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2011 Samsung Electronics Co., Ltd.
- *
- * S5P - Helper functions for MIPI-CSIS and MIPI-DSIM D-PHY control
- *
- * 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/export.h>
-#include <linux/kernel.h>
-#include <linux/platform_device.h>
-#include <linux/io.h>
-#include <linux/spinlock.h>
-#include <mach/regs-clock.h>
-
-static int __s5p_mipi_phy_control(int id, bool on, u32 reset)
-{
-	static DEFINE_SPINLOCK(lock);
-	void __iomem *addr;
-	unsigned long flags;
-	u32 cfg;
-
-	id = max(0, id);
-	if (id > 1)
-		return -EINVAL;
-
-	addr = S5P_MIPI_DPHY_CONTROL(id);
-
-	spin_lock_irqsave(&lock, flags);
-
-	cfg = __raw_readl(addr);
-	cfg = on ? (cfg | reset) : (cfg & ~reset);
-	__raw_writel(cfg, addr);
-
-	if (on) {
-		cfg |= S5P_MIPI_DPHY_ENABLE;
-	} else if (!(cfg & (S5P_MIPI_DPHY_SRESETN |
-			    S5P_MIPI_DPHY_MRESETN) & ~reset)) {
-		cfg &= ~S5P_MIPI_DPHY_ENABLE;
-	}
-
-	__raw_writel(cfg, addr);
-	spin_unlock_irqrestore(&lock, flags);
-
-	return 0;
-}
-
-int s5p_csis_phy_enable(int id, bool on)
-{
-	return __s5p_mipi_phy_control(id, on, S5P_MIPI_DPHY_SRESETN);
-}
-EXPORT_SYMBOL(s5p_csis_phy_enable);
-
-int s5p_dsim_phy_enable(struct platform_device *pdev, bool on)
-{
-	return __s5p_mipi_phy_control(pdev->id, on, S5P_MIPI_DPHY_MRESETN);
-}
-EXPORT_SYMBOL(s5p_dsim_phy_enable);
-- 
1.7.4.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs
  2013-09-28 19:27 ` [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Sylwester Nawrocki
@ 2013-09-28 19:35   ` Sylwester Nawrocki
  0 siblings, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:35 UTC (permalink / raw)
  To: linux-arm-kernel

(adding missing devicetree mailing list at Cc)

On 09/28/2013 09:27 PM, Sylwester Nawrocki wrote:
> Add a PHY provider driver for the Samsung S5P/Exynos SoC MIPI CSI-2
> receiver and MIPI DSI transmitter DPHYs.
>
> Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
> ---
> Changes since v4:
>   - updated to latest version of the PHY framework - removed PHY
>     labels.
>
> The individual driver symbols in drivers/phy/Kconfig should
> presumably be prefixed with, e.g. PHY_. This is something that
> perhaps could be done as a follow up patch.
> ---
>   .../devicetree/bindings/phy/samsung-phy.txt        |   14 ++
>   drivers/phy/Kconfig                                |    6 +
>   drivers/phy/Makefile                               |    7 +-
>   drivers/phy/phy-exynos-mipi-video.c                |  176 ++++++++++++++++++++
>   4 files changed, 200 insertions(+), 3 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/phy/samsung-phy.txt
>   create mode 100644 drivers/phy/phy-exynos-mipi-video.c
>
> diff --git a/Documentation/devicetree/bindings/phy/samsung-phy.txt b/Documentation/devicetree/bindings/phy/samsung-phy.txt
> new file mode 100644
> index 0000000..5ff208c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/samsung-phy.txt
> @@ -0,0 +1,14 @@
> +Samsung S5P/EXYNOS SoC series MIPI CSIS/DSIM DPHY
> +-------------------------------------------------
> +
> +Required properties:
> +- compatible : should be "samsung,s5pv210-mipi-video-phy";
> +- reg : offset and length of the MIPI DPHY register set;
> +- #phy-cells : from the generic phy bindings, must be 1;
> +
> +For "samsung,s5pv210-mipi-video-phy" compatible PHYs the second cell in
> +the PHY specifier identifies the PHY and its meaning is as follows:
> +  0 - MIPI CSIS 0,
> +  1 - MIPI DSIM 0,
> +  2 - MIPI CSIS 1,
> +  3 - MIPI DSIM 1.
> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
> index ac239ac..0062d7e 100644
> --- a/drivers/phy/Kconfig
> +++ b/drivers/phy/Kconfig
> @@ -15,6 +15,12 @@ config GENERIC_PHY
>   	  phy users can obtain reference to the PHY. All the users of this
>   	  framework should select this config.
>
> +config PHY_EXYNOS_MIPI_VIDEO
> +	tristate "S5P/EXYNOS SoC series MIPI CSI-2/DSI PHY driver"
> +	help
> +	  Support for MIPI CSI-2 and MIPI DSI DPHY found on Samsung S5P
> +	  and EXYNOS SoCs.
> +
>   config OMAP_USB2
>   	tristate "OMAP USB2 PHY Driver"
>   	depends on ARCH_OMAP2PLUS
> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
> index 0dd8a98..6344053 100644
> --- a/drivers/phy/Makefile
> +++ b/drivers/phy/Makefile
> @@ -2,6 +2,7 @@
>   # Makefile for the phy drivers.
>   #
>
> -obj-$(CONFIG_GENERIC_PHY)	+= phy-core.o
> -obj-$(CONFIG_OMAP_USB2)		+= phy-omap-usb2.o
> -obj-$(CONFIG_TWL4030_USB)	+= phy-twl4030-usb.o
> +obj-$(CONFIG_GENERIC_PHY)		+= phy-core.o
> +obj-$(CONFIG_PHY_EXYNOS_MIPI_VIDEO)	+= phy-exynos-mipi-video.o
> +obj-$(CONFIG_OMAP_USB2)			+= phy-omap-usb2.o
> +obj-$(CONFIG_TWL4030_USB)		+= phy-twl4030-usb.o
> diff --git a/drivers/phy/phy-exynos-mipi-video.c b/drivers/phy/phy-exynos-mipi-video.c
> new file mode 100644
> index 0000000..b73b86a
> --- /dev/null
> +++ b/drivers/phy/phy-exynos-mipi-video.c
> @@ -0,0 +1,176 @@
> +/*
> + * Samsung S5P/EXYNOS SoC series MIPI CSIS/DSIM DPHY driver
> + *
> + * Copyright (C) 2013 Samsung Electronics Co., Ltd.
> + * Author: Sylwester Nawrocki<s.nawrocki@samsung.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/io.h>
> +#include<linux/kernel.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/spinlock.h>
> +
> +/* MIPI_PHYn_CONTROL register offset: n = 0..1 */
> +#define EXYNOS_MIPI_PHY_CONTROL(n)	((n) * 4)
> +#define EXYNOS_MIPI_PHY_ENABLE		(1<<  0)
> +#define EXYNOS_MIPI_PHY_SRESETN		(1<<  1)
> +#define EXYNOS_MIPI_PHY_MRESETN		(1<<  2)
> +#define EXYNOS_MIPI_PHY_RESET_MASK	(3<<  1)
> +
> +enum exynos_mipi_phy_id {
> +	EXYNOS_MIPI_PHY_ID_CSIS0,
> +	EXYNOS_MIPI_PHY_ID_DSIM0,
> +	EXYNOS_MIPI_PHY_ID_CSIS1,
> +	EXYNOS_MIPI_PHY_ID_DSIM1,
> +	EXYNOS_MIPI_PHYS_NUM
> +};
> +
> +#define is_mipi_dsim_phy_id(id) \
> +	((id) = EXYNOS_MIPI_PHY_ID_DSIM0 || (id) = EXYNOS_MIPI_PHY_ID_DSIM1)
> +
> +struct exynos_mipi_video_phy {
> +	spinlock_t slock;
> +	struct video_phy_desc {
> +		struct phy *phy;
> +		unsigned int index;
> +	} phys[EXYNOS_MIPI_PHYS_NUM];
> +	void __iomem *regs;
> +};
> +
> +static int __set_phy_state(struct exynos_mipi_video_phy *state,
> +			enum exynos_mipi_phy_id id, unsigned int on)
> +{
> +	void __iomem *addr;
> +	u32 reg, reset;
> +
> +	addr = state->regs + EXYNOS_MIPI_PHY_CONTROL(id / 2);
> +
> +	if (is_mipi_dsim_phy_id(id))
> +		reset = EXYNOS_MIPI_PHY_MRESETN;
> +	else
> +		reset = EXYNOS_MIPI_PHY_SRESETN;
> +
> +	spin_lock(&state->slock);
> +	reg = readl(addr);
> +	if (on)
> +		reg |= reset;
> +	else
> +		reg&= ~reset;
> +	writel(reg, addr);
> +
> +	/* Clear ENABLE bit only if MRESETN, SRESETN bits are not set. */
> +	if (on)
> +		reg |= EXYNOS_MIPI_PHY_ENABLE;
> +	else if (!(reg&  EXYNOS_MIPI_PHY_RESET_MASK))
> +		reg&= ~EXYNOS_MIPI_PHY_ENABLE;
> +
> +	writel(reg, addr);
> +	spin_unlock(&state->slock);
> +	return 0;
> +}
> +
> +#define to_mipi_video_phy(desc) \
> +	container_of((desc), struct exynos_mipi_video_phy, phys[(desc)->index]);
> +
> +static int exynos_mipi_video_phy_power_on(struct phy *phy)
> +{
> +	struct video_phy_desc *phy_desc = phy_get_drvdata(phy);
> +	struct exynos_mipi_video_phy *state = to_mipi_video_phy(phy_desc);
> +
> +	return __set_phy_state(state, phy_desc->index, 1);
> +}
> +
> +static int exynos_mipi_video_phy_power_off(struct phy *phy)
> +{
> +	struct video_phy_desc *phy_desc = phy_get_drvdata(phy);
> +	struct exynos_mipi_video_phy *state = to_mipi_video_phy(phy_desc);
> +
> +	return __set_phy_state(state, phy_desc->index, 1);
> +}
> +
> +static struct phy *exynos_mipi_video_phy_xlate(struct device *dev,
> +					struct of_phandle_args *args)
> +{
> +	struct exynos_mipi_video_phy *state = dev_get_drvdata(dev);
> +
> +	if (WARN_ON(args->args[0]>  EXYNOS_MIPI_PHYS_NUM))
> +		return ERR_PTR(-ENODEV);
> +
> +	return state->phys[args->args[0]].phy;
> +}
> +
> +static struct phy_ops exynos_mipi_video_phy_ops = {
> +	.power_on	= exynos_mipi_video_phy_power_on,
> +	.power_off	= exynos_mipi_video_phy_power_off,
> +	.owner		= THIS_MODULE,
> +};
> +
> +static int exynos_mipi_video_phy_probe(struct platform_device *pdev)
> +{
> +	struct exynos_mipi_video_phy *state;
> +	struct device *dev =&pdev->dev;
> +	struct resource *res;
> +	struct phy_provider *phy_provider;
> +	unsigned int i;
> +
> +	state = devm_kzalloc(dev, sizeof(*state), GFP_KERNEL);
> +	if (!state)
> +		return -ENOMEM;
> +
> +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +
> +	state->regs = devm_ioremap_resource(dev, res);
> +	if (IS_ERR(state->regs))
> +		return PTR_ERR(state->regs);
> +
> +	dev_set_drvdata(dev, state);
> +	spin_lock_init(&state->slock);
> +
> +	phy_provider = devm_of_phy_provider_register(dev,
> +					exynos_mipi_video_phy_xlate);
> +	if (IS_ERR(phy_provider))
> +		return PTR_ERR(phy_provider);
> +
> +	for (i = 0; i<  EXYNOS_MIPI_PHYS_NUM; i++) {
> +		struct phy *phy = devm_phy_create(dev,
> +					&exynos_mipi_video_phy_ops, NULL);
> +		if (IS_ERR(phy)) {
> +			dev_err(dev, "failed to create PHY %d\n", i);
> +			return PTR_ERR(phy);
> +		}
> +
> +		state->phys[i].phy = phy;
> +		state->phys[i].index = i;
> +		phy_set_drvdata(phy,&state->phys[i]);
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct of_device_id exynos_mipi_video_phy_of_match[] = {
> +	{ .compatible = "samsung,s5pv210-mipi-video-phy" },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(of, exynos_mipi_video_phy_of_match);
> +
> +static struct platform_driver exynos_mipi_video_phy_driver = {
> +	.probe	= exynos_mipi_video_phy_probe,
> +	.driver = {
> +		.of_match_table	= exynos_mipi_video_phy_of_match,
> +		.name  = "exynos-mipi-video-phy",
> +		.owner = THIS_MODULE,
> +	}
> +};
> +module_platform_driver(exynos_mipi_video_phy_driver);
> +
> +MODULE_DESCRIPTION("Samsung S5P/EXYNOS SoC MIPI CSI-2/DSI PHY driver");
> +MODULE_AUTHOR("Sylwester Nawrocki<s.nawrocki@samsung.com>");
> +MODULE_LICENSE("GPL v2");

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
@ 2013-09-28 19:37   ` Sylwester Nawrocki
  2013-10-01  5:40   ` Kishon Vijay Abraham I
  1 sibling, 0 replies; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-09-28 19:37 UTC (permalink / raw)
  To: linux-arm-kernel

(adding missing devicetree mailing list at Cc)

On 09/28/2013 09:27 PM, Sylwester Nawrocki wrote:
> Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>
> Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
> Acked-by: Felipe Balbi<balbi@ti.com>
> ---
>   arch/arm/boot/dts/exynos4.dtsi |   10 ++++++++++
>   1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index caadc02..a73eeb5 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -49,6 +49,12 @@
>   		reg =<0x10000000 0x100>;
>   	};
>
> +	mipi_phy: video-phy@10020710 {
> +		compatible = "samsung,s5pv210-mipi-video-phy";
> +		reg =<0x10020710 8>;
> +		#phy-cells =<1>;
> +	};
> +
>   	pd_mfc: mfc-power-domain@10023C40 {
>   		compatible = "samsung,exynos4210-pd";
>   		reg =<0x10023C40 0x20>;
> @@ -161,6 +167,8 @@
>   			clock-names = "csis", "sclk_csis";
>   			bus-width =<4>;
>   			samsung,power-domain =<&pd_cam>;
> +			phys =<&mipi_phy 0>;
> +			phy-names = "csis";
>   			status = "disabled";
>   			#address-cells =<1>;
>   			#size-cells =<0>;
> @@ -174,6 +182,8 @@
>   			clock-names = "csis", "sclk_csis";
>   			bus-width =<2>;
>   			samsung,power-domain =<&pd_cam>;
> +			phys =<&mipi_phy 2>;
> +			phy-names = "csis";
>   			status = "disabled";
>   			#address-cells =<1>;
>   			#size-cells =<0>;

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
  2013-09-28 19:37   ` Sylwester Nawrocki
@ 2013-10-01  5:40   ` Kishon Vijay Abraham I
  2013-10-01 14:13     ` Sylwester Nawrocki
  1 sibling, 1 reply; 14+ messages in thread
From: Kishon Vijay Abraham I @ 2013-10-01  5:40 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,


On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
> Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Felipe Balbi <balbi@ti.com>

Can this patch be taken through exynos dt tree?

Thanks
Kishon
> ---
>  arch/arm/boot/dts/exynos4.dtsi |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
> index caadc02..a73eeb5 100644
> --- a/arch/arm/boot/dts/exynos4.dtsi
> +++ b/arch/arm/boot/dts/exynos4.dtsi
> @@ -49,6 +49,12 @@
>  		reg = <0x10000000 0x100>;
>  	};
>  
> +	mipi_phy: video-phy@10020710 {
> +		compatible = "samsung,s5pv210-mipi-video-phy";
> +		reg = <0x10020710 8>;
> +		#phy-cells = <1>;
> +	};
> +
>  	pd_mfc: mfc-power-domain@10023C40 {
>  		compatible = "samsung,exynos4210-pd";
>  		reg = <0x10023C40 0x20>;
> @@ -161,6 +167,8 @@
>  			clock-names = "csis", "sclk_csis";
>  			bus-width = <4>;
>  			samsung,power-domain = <&pd_cam>;
> +			phys = <&mipi_phy 0>;
> +			phy-names = "csis";
>  			status = "disabled";
>  			#address-cells = <1>;
>  			#size-cells = <0>;
> @@ -174,6 +182,8 @@
>  			clock-names = "csis", "sclk_csis";
>  			bus-width = <2>;
>  			samsung,power-domain = <&pd_cam>;
> +			phys = <&mipi_phy 2>;
> +			phy-names = "csis";
>  			status = "disabled";
>  			#address-cells = <1>;
>  			#size-cells = <0>;
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-10-01  5:40   ` Kishon Vijay Abraham I
@ 2013-10-01 14:13     ` Sylwester Nawrocki
  2013-10-01 15:38       ` Kishon Vijay Abraham I
  0 siblings, 1 reply; 14+ messages in thread
From: Sylwester Nawrocki @ 2013-10-01 14:13 UTC (permalink / raw)
  To: linux-arm-kernel

On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>> >  Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>> >
>> >  Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>> >  Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>> >  Acked-by: Felipe Balbi<balbi@ti.com>
>
> Can this patch be taken through exynos dt tree?

Yes, that makes more sense indeed. Kukjin, would you mind taking
this patch to your tree ?

Thanks,
Sylwester

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-10-01 14:13     ` Sylwester Nawrocki
@ 2013-10-01 15:38       ` Kishon Vijay Abraham I
  2013-10-06  0:09         ` Kukjin Kim
  0 siblings, 1 reply; 14+ messages in thread
From: Kishon Vijay Abraham I @ 2013-10-01 15:38 UTC (permalink / raw)
  To: linux-arm-kernel

On Wednesday 02 October 2013 02:43 AM, Sylwester Nawrocki wrote:
> On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
>> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>>> >  Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>>> >
>>> >  Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>>> >  Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>> >  Acked-by: Felipe Balbi<balbi@ti.com>
>>
>> Can this patch be taken through exynos dt tree?
> 
> Yes, that makes more sense indeed. Kukjin, would you mind taking
> this patch to your tree ?

FWIW
Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
> 
> Thanks,
> Sylwester


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-10-01 15:38       ` Kishon Vijay Abraham I
@ 2013-10-06  0:09         ` Kukjin Kim
  2013-10-06  0:11           ` Kukjin Kim
  0 siblings, 1 reply; 14+ messages in thread
From: Kukjin Kim @ 2013-10-06  0:09 UTC (permalink / raw)
  To: linux-arm-kernel


On 10/02/13 00:26, Kishon Vijay Abraham I wrote:
> On Wednesday 02 October 2013 02:43 AM, Sylwester Nawrocki wrote:
>> On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
>>> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>>>>>   Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>>>>>
>>>>>   Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>>>>>   Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>>   Acked-by: Felipe Balbi<balbi@ti.com>
>>>
>>> Can this patch be taken through exynos dt tree?
>>
>> Yes, that makes more sense indeed. Kukjin, would you mind taking
>> this patch to your tree ?
>
Sure. Applied this whole series.

> FWIW
> Acked-by: Kishon Vijay Abraham I<kishon@ti.com>
>>

Thanks,
Kukjin

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi
  2013-10-06  0:09         ` Kukjin Kim
@ 2013-10-06  0:11           ` Kukjin Kim
  0 siblings, 0 replies; 14+ messages in thread
From: Kukjin Kim @ 2013-10-06  0:11 UTC (permalink / raw)
  To: linux-arm-kernel

On 10/06/13 09:09, Kukjin Kim wrote:
>
> On 10/02/13 00:26, Kishon Vijay Abraham I wrote:
>> On Wednesday 02 October 2013 02:43 AM, Sylwester Nawrocki wrote:
>>> On 10/01/2013 07:28 AM, Kishon Vijay Abraham I wrote:
>>>> On Sunday 29 September 2013 12:57 AM, Sylwester Nawrocki wrote:
>>>>>> Add PHY provider node for the MIPI CSIS and MIPI DSIM PHYs.
>>>>>>
>>>>>> Signed-off-by: Sylwester Nawrocki<s.nawrocki@samsung.com>
>>>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>>>>>> Acked-by: Felipe Balbi<balbi@ti.com>
>>>>
>>>> Can this patch be taken through exynos dt tree?
>>>
>>> Yes, that makes more sense indeed. Kukjin, would you mind taking
>>> this patch to your tree ?
>>
> Sure. Applied this whole series.
>
Oops, sorry. Only this patch ;-)

>> FWIW
>> Acked-by: Kishon Vijay Abraham I<kishon@ti.com>
>>>

Thanks,
Kukjin

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic PHY driver
  2013-09-28 19:27 ` [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic " Sylwester Nawrocki
@ 2013-10-09  8:32   ` Tomi Valkeinen
  0 siblings, 0 replies; 14+ messages in thread
From: Tomi Valkeinen @ 2013-10-09  8:32 UTC (permalink / raw)
  To: linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 760 bytes --]

On 28/09/13 22:27, Sylwester Nawrocki wrote:
> Use the generic PHY API instead of the platform callback
> for the MIPI DSIM DPHY enable/reset control.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Felipe Balbi <balbi@ti.com>
> Acked-by: Donghwa Lee <dh09.lee@samsung.com>
> ---
> Changes since v4:
>  - PHY label removed from the platform data structure.
> ---
>  drivers/video/exynos/Kconfig           |    1 +
>  drivers/video/exynos/exynos_mipi_dsi.c |   19 ++++++++++---------
>  include/video/exynos_mipi_dsim.h       |    5 ++---
>  3 files changed, 13 insertions(+), 12 deletions(-)

Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

 Tomi



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 901 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2013-10-09  8:32 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-28 19:27 [PATCH V5 0/5] Generic PHY driver for the Exynos SoC MIPI CSI-2/DSI DPHYs Sylwester Nawrocki
2013-09-28 19:27 ` [PATCH V5 1/5] ARM: dts: Add MIPI PHY node to exynos4.dtsi Sylwester Nawrocki
2013-09-28 19:37   ` Sylwester Nawrocki
2013-10-01  5:40   ` Kishon Vijay Abraham I
2013-10-01 14:13     ` Sylwester Nawrocki
2013-10-01 15:38       ` Kishon Vijay Abraham I
2013-10-06  0:09         ` Kukjin Kim
2013-10-06  0:11           ` Kukjin Kim
2013-09-28 19:27 ` [PATCH V5 2/5] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Sylwester Nawrocki
2013-09-28 19:35   ` Sylwester Nawrocki
2013-09-28 19:27 ` [PATCH V5 3/5] [media] exynos4-is: Use the generic MIPI CSIS PHY driver Sylwester Nawrocki
2013-09-28 19:27 ` [PATCH V5 4/5] video: exynos_mipi_dsim: Use the generic " Sylwester Nawrocki
2013-10-09  8:32   ` Tomi Valkeinen
2013-09-28 19:27 ` [PATCH V5 5/5] ARM: Samsung: Remove the MIPI PHY setup code Sylwester Nawrocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).