Lines Matching refs:phy

25 static void csiphy_routing_cfg_3630(struct isp_csiphy *phy,
30 phy->isp, OMAP3_ISP_IOMEM_3630_CONTROL_CAMERA_PHY_CTRL, 0);
66 isp_reg_writel(phy->isp, reg,
70 static void csiphy_routing_cfg_3430(struct isp_csiphy *phy, u32 iface, bool on,
81 isp_reg_writel(phy->isp, 0,
89 isp_reg_writel(phy->isp, csirxfe,
95 * @phy: relevant phy device
105 static void csiphy_routing_cfg(struct isp_csiphy *phy,
109 if (phy->isp->mmio_base[OMAP3_ISP_IOMEM_3630_CONTROL_CAMERA_PHY_CTRL]
111 return csiphy_routing_cfg_3630(phy, iface, ccp2_strobe);
112 if (phy->isp->mmio_base[OMAP3_ISP_IOMEM_343X_CONTROL_CSIRXFE])
113 return csiphy_routing_cfg_3430(phy, iface, on, ccp2_strobe);
120 static void csiphy_power_autoswitch_enable(struct isp_csiphy *phy, bool enable)
122 isp_reg_clr_set(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG,
133 static int csiphy_set_power(struct isp_csiphy *phy, u32 power)
138 isp_reg_clr_set(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG,
144 reg = isp_reg_readl(phy->isp, phy->cfg_regs, ISPCSI2_PHY_CFG) &
153 dev_err(phy->isp->dev, "CSI2 CIO set power failed!\n");
167 static int omap3isp_csiphy_config(struct isp_csiphy *phy)
169 struct isp_csi2_device *csi2 = phy->csi2;
185 for (i = 0; i < phy->num_data_lanes; i++) {
206 csiphy_routing_cfg(phy, subdevs->interface, true,
214 reg = isp_reg_readl(csi2->isp, phy->phy_regs, ISPCSIPHY_REG0);
225 isp_reg_writel(csi2->isp, reg, phy->phy_regs, ISPCSIPHY_REG0);
227 reg = isp_reg_readl(csi2->isp, phy->phy_regs, ISPCSIPHY_REG1);
236 isp_reg_writel(csi2->isp, reg, phy->phy_regs, ISPCSIPHY_REG1);
239 reg = isp_reg_readl(csi2->isp, phy->cfg_regs, ISPCSI2_PHY_CFG);
241 for (i = 0; i < phy->num_data_lanes; i++) {
255 isp_reg_writel(csi2->isp, reg, phy->cfg_regs, ISPCSI2_PHY_CFG);
260 int omap3isp_csiphy_acquire(struct isp_csiphy *phy)
264 if (phy->vdd == NULL) {
265 dev_err(phy->isp->dev, "Power regulator for CSI PHY not "
270 mutex_lock(&phy->mutex);
272 rval = regulator_enable(phy->vdd);
276 rval = omap3isp_csi2_reset(phy->csi2);
280 rval = omap3isp_csiphy_config(phy);
284 rval = csiphy_set_power(phy, ISPCSI2_PHY_CFG_PWR_CMD_ON);
286 regulator_disable(phy->vdd);
290 csiphy_power_autoswitch_enable(phy, true);
291 phy->phy_in_use = 1;
294 mutex_unlock(&phy->mutex);
298 void omap3isp_csiphy_release(struct isp_csiphy *phy)
300 mutex_lock(&phy->mutex);
301 if (phy->phy_in_use) {
302 struct isp_csi2_device *csi2 = phy->csi2;
308 csiphy_routing_cfg(phy, subdevs->interface, false,
310 csiphy_power_autoswitch_enable(phy, false);
311 csiphy_set_power(phy, ISPCSI2_PHY_CFG_PWR_CMD_OFF);
312 regulator_disable(phy->vdd);
313 phy->phy_in_use = 0;
315 mutex_unlock(&phy->mutex);