Lines Matching refs:phy

27  * Called with phy->mutex taken.
29 static void csiphy_lanes_config(struct iss_csiphy *phy)
34 reg = iss_reg_read(phy->iss, phy->cfg_regs, CSI2_COMPLEXIO_CFG);
36 for (i = 0; i < phy->max_data_lanes; i++) {
39 reg |= (phy->lanes.data[i].pol ?
41 reg |= (phy->lanes.data[i].pos <<
47 reg |= phy->lanes.clk.pol ? CSI2_COMPLEXIO_CFG_CLOCK_POL : 0;
48 reg |= phy->lanes.clk.pos << CSI2_COMPLEXIO_CFG_CLOCK_POSITION_SHIFT;
50 iss_reg_write(phy->iss, phy->cfg_regs, CSI2_COMPLEXIO_CFG, reg);
59 static int csiphy_set_power(struct iss_csiphy *phy, u32 power)
64 iss_reg_update(phy->iss, phy->cfg_regs, CSI2_COMPLEXIO_CFG,
71 reg = iss_reg_read(phy->iss, phy->cfg_regs, CSI2_COMPLEXIO_CFG)
80 dev_err(phy->iss->dev, "CSI2 CIO set power failed!\n");
90 * Called with phy->mutex taken.
92 static void csiphy_dphy_config(struct iss_csiphy *phy)
97 reg = phy->dphy.ths_term << REGISTER0_THS_TERM_SHIFT;
98 reg |= phy->dphy.ths_settle << REGISTER0_THS_SETTLE_SHIFT;
100 iss_reg_write(phy->iss, phy->phy_regs, REGISTER0, reg);
103 reg = phy->dphy.tclk_term << REGISTER1_TCLK_TERM_SHIFT;
104 reg |= phy->dphy.tclk_miss << REGISTER1_CTRLCLK_DIV_FACTOR_SHIFT;
105 reg |= phy->dphy.tclk_settle << REGISTER1_TCLK_SETTLE_SHIFT;
108 iss_reg_write(phy->iss, phy->phy_regs, REGISTER1, reg);
139 * - bit [20:19] : CSIPHY2 config: 00 d-phy, 01/10 ccp2
141 * - bit [17:16] : CSIPHY1 config: 00 d-phy, 01/10 ccp2
173 csi2->phy->used_data_lanes = 0;
176 for (i = 0; i < csi2->phy->max_data_lanes; i++) {
181 lanes->data[i].pos > (csi2->phy->max_data_lanes + 1))
188 csi2->phy->used_data_lanes++;
192 lanes->clk.pos > (csi2->phy->max_data_lanes + 1))
199 / (2 * csi2->phy->used_data_lanes)
212 mutex_lock(&csi2->phy->mutex);
213 csi2->phy->dphy = csi2phy;
214 csi2->phy->lanes = *lanes;
215 mutex_unlock(&csi2->phy->mutex);
220 int omap4iss_csiphy_acquire(struct iss_csiphy *phy)
224 mutex_lock(&phy->mutex);
226 rval = omap4iss_csi2_reset(phy->csi2);
230 csiphy_dphy_config(phy);
231 csiphy_lanes_config(phy);
233 rval = csiphy_set_power(phy, CSI2_COMPLEXIO_CFG_PWD_CMD_ON);
237 phy->phy_in_use = 1;
240 mutex_unlock(&phy->mutex);
244 void omap4iss_csiphy_release(struct iss_csiphy *phy)
246 mutex_lock(&phy->mutex);
247 if (phy->phy_in_use) {
248 csiphy_set_power(phy, CSI2_COMPLEXIO_CFG_PWD_CMD_OFF);
249 phy->phy_in_use = 0;
251 mutex_unlock(&phy->mutex);