diff options
| -rw-r--r-- | drivers/phy/phy-exynos-mipi-video.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/phy/phy-exynos-mipi-video.c b/drivers/phy/phy-exynos-mipi-video.c index d19649328d05..df7519a39ba0 100644 --- a/drivers/phy/phy-exynos-mipi-video.c +++ b/drivers/phy/phy-exynos-mipi-video.c | |||
| @@ -43,7 +43,6 @@ struct exynos_mipi_video_phy { | |||
| 43 | } phys[EXYNOS_MIPI_PHYS_NUM]; | 43 | } phys[EXYNOS_MIPI_PHYS_NUM]; |
| 44 | spinlock_t slock; | 44 | spinlock_t slock; |
| 45 | void __iomem *regs; | 45 | void __iomem *regs; |
| 46 | struct mutex mutex; | ||
| 47 | struct regmap *regmap; | 46 | struct regmap *regmap; |
| 48 | }; | 47 | }; |
| 49 | 48 | ||
| @@ -59,8 +58,9 @@ static int __set_phy_state(struct exynos_mipi_video_phy *state, | |||
| 59 | else | 58 | else |
| 60 | reset = EXYNOS4_MIPI_PHY_SRESETN; | 59 | reset = EXYNOS4_MIPI_PHY_SRESETN; |
| 61 | 60 | ||
| 61 | spin_lock(&state->slock); | ||
| 62 | |||
| 62 | if (!IS_ERR(state->regmap)) { | 63 | if (!IS_ERR(state->regmap)) { |
| 63 | mutex_lock(&state->mutex); | ||
| 64 | regmap_read(state->regmap, offset, &val); | 64 | regmap_read(state->regmap, offset, &val); |
| 65 | if (on) | 65 | if (on) |
| 66 | val |= reset; | 66 | val |= reset; |
| @@ -72,11 +72,9 @@ static int __set_phy_state(struct exynos_mipi_video_phy *state, | |||
| 72 | else if (!(val & EXYNOS4_MIPI_PHY_RESET_MASK)) | 72 | else if (!(val & EXYNOS4_MIPI_PHY_RESET_MASK)) |
| 73 | val &= ~EXYNOS4_MIPI_PHY_ENABLE; | 73 | val &= ~EXYNOS4_MIPI_PHY_ENABLE; |
| 74 | regmap_write(state->regmap, offset, val); | 74 | regmap_write(state->regmap, offset, val); |
| 75 | mutex_unlock(&state->mutex); | ||
| 76 | } else { | 75 | } else { |
| 77 | addr = state->regs + EXYNOS_MIPI_PHY_CONTROL(id / 2); | 76 | addr = state->regs + EXYNOS_MIPI_PHY_CONTROL(id / 2); |
| 78 | 77 | ||
| 79 | spin_lock(&state->slock); | ||
| 80 | val = readl(addr); | 78 | val = readl(addr); |
| 81 | if (on) | 79 | if (on) |
| 82 | val |= reset; | 80 | val |= reset; |
| @@ -90,9 +88,9 @@ static int __set_phy_state(struct exynos_mipi_video_phy *state, | |||
| 90 | val &= ~EXYNOS4_MIPI_PHY_ENABLE; | 88 | val &= ~EXYNOS4_MIPI_PHY_ENABLE; |
| 91 | 89 | ||
| 92 | writel(val, addr); | 90 | writel(val, addr); |
| 93 | spin_unlock(&state->slock); | ||
| 94 | } | 91 | } |
| 95 | 92 | ||
| 93 | spin_unlock(&state->slock); | ||
| 96 | return 0; | 94 | return 0; |
| 97 | } | 95 | } |
| 98 | 96 | ||
| @@ -158,7 +156,6 @@ static int exynos_mipi_video_phy_probe(struct platform_device *pdev) | |||
| 158 | 156 | ||
| 159 | dev_set_drvdata(dev, state); | 157 | dev_set_drvdata(dev, state); |
| 160 | spin_lock_init(&state->slock); | 158 | spin_lock_init(&state->slock); |
| 161 | mutex_init(&state->mutex); | ||
| 162 | 159 | ||
| 163 | for (i = 0; i < EXYNOS_MIPI_PHYS_NUM; i++) { | 160 | for (i = 0; i < EXYNOS_MIPI_PHYS_NUM; i++) { |
| 164 | struct phy *phy = devm_phy_create(dev, NULL, | 161 | struct phy *phy = devm_phy_create(dev, NULL, |
