Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccbfd1d4 authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mauro Carvalho Chehab
Browse files

[media] s5p-csis: Replace phy_enable platform data callback with direct call



The phy_enable callback is common for all Samsung SoC platforms,
replace it with direct function call so the MIPI-CSI2 DPHY control
is also possible on device tree instantiated platforms.

Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent eabe7b01
Loading
Loading
Loading
Loading
+7 −6
Original line number Original line Diff line number Diff line
@@ -160,6 +160,7 @@ struct csis_pktbuf {
 *        protecting @format and @flags members
 *        protecting @format and @flags members
 * @pads: CSIS pads array
 * @pads: CSIS pads array
 * @sd: v4l2_subdev associated with CSIS device instance
 * @sd: v4l2_subdev associated with CSIS device instance
 * @index: the hardware instance index
 * @pdev: CSIS platform device
 * @pdev: CSIS platform device
 * @regs: mmaped I/O registers memory
 * @regs: mmaped I/O registers memory
 * @supplies: CSIS regulator supplies
 * @supplies: CSIS regulator supplies
@@ -176,6 +177,7 @@ struct csis_state {
	struct mutex lock;
	struct mutex lock;
	struct media_pad pads[CSIS_PADS_NUM];
	struct media_pad pads[CSIS_PADS_NUM];
	struct v4l2_subdev sd;
	struct v4l2_subdev sd;
	u8 index;
	struct platform_device *pdev;
	struct platform_device *pdev;
	void __iomem *regs;
	void __iomem *regs;
	struct regulator_bulk_data supplies[CSIS_NUM_SUPPLIES];
	struct regulator_bulk_data supplies[CSIS_NUM_SUPPLIES];
@@ -666,14 +668,15 @@ static int __devinit s5pcsis_probe(struct platform_device *pdev)
	spin_lock_init(&state->slock);
	spin_lock_init(&state->slock);


	state->pdev = pdev;
	state->pdev = pdev;
	state->index = max(0, pdev->id);


	pdata = pdev->dev.platform_data;
	pdata = pdev->dev.platform_data;
	if (pdata == NULL || pdata->phy_enable == NULL) {
	if (pdata == NULL) {
		dev_err(&pdev->dev, "Platform data not fully specified\n");
		dev_err(&pdev->dev, "Platform data not fully specified\n");
		return -EINVAL;
		return -EINVAL;
	}
	}


	if ((pdev->id == 1 && pdata->lanes > CSIS1_MAX_LANES) ||
	if ((state->index == 1 && pdata->lanes > CSIS1_MAX_LANES) ||
	    pdata->lanes > CSIS0_MAX_LANES) {
	    pdata->lanes > CSIS0_MAX_LANES) {
		dev_err(&pdev->dev, "Unsupported number of data lanes: %d\n",
		dev_err(&pdev->dev, "Unsupported number of data lanes: %d\n",
			pdata->lanes);
			pdata->lanes);
@@ -756,7 +759,6 @@ e_clkput:


static int s5pcsis_pm_suspend(struct device *dev, bool runtime)
static int s5pcsis_pm_suspend(struct device *dev, bool runtime)
{
{
	struct s5p_platform_mipi_csis *pdata = dev->platform_data;
	struct platform_device *pdev = to_platform_device(dev);
	struct platform_device *pdev = to_platform_device(dev);
	struct v4l2_subdev *sd = platform_get_drvdata(pdev);
	struct v4l2_subdev *sd = platform_get_drvdata(pdev);
	struct csis_state *state = sd_to_csis_state(sd);
	struct csis_state *state = sd_to_csis_state(sd);
@@ -768,7 +770,7 @@ static int s5pcsis_pm_suspend(struct device *dev, bool runtime)
	mutex_lock(&state->lock);
	mutex_lock(&state->lock);
	if (state->flags & ST_POWERED) {
	if (state->flags & ST_POWERED) {
		s5pcsis_stop_stream(state);
		s5pcsis_stop_stream(state);
		ret = pdata->phy_enable(state->pdev, false);
		ret = s5p_csis_phy_enable(state->index, false);
		if (ret)
		if (ret)
			goto unlock;
			goto unlock;
		ret = regulator_bulk_disable(CSIS_NUM_SUPPLIES,
		ret = regulator_bulk_disable(CSIS_NUM_SUPPLIES,
@@ -787,7 +789,6 @@ static int s5pcsis_pm_suspend(struct device *dev, bool runtime)


static int s5pcsis_pm_resume(struct device *dev, bool runtime)
static int s5pcsis_pm_resume(struct device *dev, bool runtime)
{
{
	struct s5p_platform_mipi_csis *pdata = dev->platform_data;
	struct platform_device *pdev = to_platform_device(dev);
	struct platform_device *pdev = to_platform_device(dev);
	struct v4l2_subdev *sd = platform_get_drvdata(pdev);
	struct v4l2_subdev *sd = platform_get_drvdata(pdev);
	struct csis_state *state = sd_to_csis_state(sd);
	struct csis_state *state = sd_to_csis_state(sd);
@@ -805,7 +806,7 @@ static int s5pcsis_pm_resume(struct device *dev, bool runtime)
					    state->supplies);
					    state->supplies);
		if (ret)
		if (ret)
			goto unlock;
			goto unlock;
		ret = pdata->phy_enable(state->pdev, true);
		ret = s5p_csis_phy_enable(state->index, true);
		if (!ret) {
		if (!ret) {
			state->flags |= ST_POWERED;
			state->flags |= ST_POWERED;
		} else {
		} else {
+5 −6
Original line number Original line Diff line number Diff line
@@ -11,8 +11,6 @@
#ifndef __PLAT_SAMSUNG_MIPI_CSIS_H_
#ifndef __PLAT_SAMSUNG_MIPI_CSIS_H_
#define __PLAT_SAMSUNG_MIPI_CSIS_H_ __FILE__
#define __PLAT_SAMSUNG_MIPI_CSIS_H_ __FILE__


struct platform_device;

/**
/**
 * struct s5p_platform_mipi_csis - platform data for S5P MIPI-CSIS driver
 * struct s5p_platform_mipi_csis - platform data for S5P MIPI-CSIS driver
 * @clk_rate: bus clock frequency
 * @clk_rate: bus clock frequency
@@ -34,10 +32,11 @@ struct s5p_platform_mipi_csis {


/**
/**
 * s5p_csis_phy_enable - global MIPI-CSI receiver D-PHY control
 * s5p_csis_phy_enable - global MIPI-CSI receiver D-PHY control
 * @pdev: MIPI-CSIS platform device
 * @id:     MIPI-CSIS harware instance index (0...1)
 * @on:     true to enable D-PHY and deassert its reset
 * @on:     true to enable D-PHY and deassert its reset
 *          false to disable D-PHY
 *          false to disable D-PHY
 * @return: 0 on success, or negative error code on failure
 */
 */
int s5p_csis_phy_enable(struct platform_device *pdev, bool on);
int s5p_csis_phy_enable(int id, bool on);


#endif /* __PLAT_SAMSUNG_MIPI_CSIS_H_ */
#endif /* __PLAT_SAMSUNG_MIPI_CSIS_H_ */