Commit 3a738c3f authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

media: omap3isp: Explicitly set the number of CSI-2 lanes used in lane cfg

The omap3isp driver extracts the CSI-2 lane configuration from the V4L2
fwnode endpoint but misses the number of lanes itself. Get this information
and use it in PHY configuration.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 838a6c56
...@@ -2061,7 +2061,10 @@ static int isp_fwnode_parse(struct device *dev, struct fwnode_handle *fwnode, ...@@ -2061,7 +2061,10 @@ static int isp_fwnode_parse(struct device *dev, struct fwnode_handle *fwnode,
buscfg->bus.csi2.lanecfg.clk.pol, buscfg->bus.csi2.lanecfg.clk.pol,
buscfg->bus.csi2.lanecfg.clk.pos); buscfg->bus.csi2.lanecfg.clk.pos);
for (i = 0; i < ISP_CSIPHY2_NUM_DATA_LANES; i++) { buscfg->bus.csi2.num_data_lanes =
vep.bus.mipi_csi2.num_data_lanes;
for (i = 0; i < buscfg->bus.csi2.num_data_lanes; i++) {
buscfg->bus.csi2.lanecfg.data[i].pos = buscfg->bus.csi2.lanecfg.data[i].pos =
vep.bus.mipi_csi2.data_lanes[i]; vep.bus.mipi_csi2.data_lanes[i];
buscfg->bus.csi2.lanecfg.data[i].pol = buscfg->bus.csi2.lanecfg.data[i].pol =
......
...@@ -169,7 +169,7 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy) ...@@ -169,7 +169,7 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy)
struct isp_bus_cfg *buscfg = pipe->external->host_priv; struct isp_bus_cfg *buscfg = pipe->external->host_priv;
struct isp_csiphy_lanes_cfg *lanes; struct isp_csiphy_lanes_cfg *lanes;
int csi2_ddrclk_khz; int csi2_ddrclk_khz;
unsigned int used_lanes = 0; unsigned int num_data_lanes, used_lanes = 0;
unsigned int i; unsigned int i;
u32 reg; u32 reg;
...@@ -181,13 +181,19 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy) ...@@ -181,13 +181,19 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy)
} }
if (buscfg->interface == ISP_INTERFACE_CCP2B_PHY1 if (buscfg->interface == ISP_INTERFACE_CCP2B_PHY1
|| buscfg->interface == ISP_INTERFACE_CCP2B_PHY2) || buscfg->interface == ISP_INTERFACE_CCP2B_PHY2) {
lanes = &buscfg->bus.ccp2.lanecfg; lanes = &buscfg->bus.ccp2.lanecfg;
else num_data_lanes = 1;
} else {
lanes = &buscfg->bus.csi2.lanecfg; lanes = &buscfg->bus.csi2.lanecfg;
num_data_lanes = buscfg->bus.csi2.num_data_lanes;
}
if (num_data_lanes > phy->num_data_lanes)
return -EINVAL;
/* Clock and data lanes verification */ /* Clock and data lanes verification */
for (i = 0; i < phy->num_data_lanes; i++) { for (i = 0; i < num_data_lanes; i++) {
if (lanes->data[i].pol > 1 || lanes->data[i].pos > 3) if (lanes->data[i].pol > 1 || lanes->data[i].pos > 3)
return -EINVAL; return -EINVAL;
...@@ -243,7 +249,7 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy) ...@@ -243,7 +249,7 @@ static int omap3isp_csiphy_config(struct isp_csiphy *phy)
/* DPHY lane configuration */ /* DPHY lane configuration */
reg = isp_reg_readl(csi2->isp, phy->cfg_regs, ISPCSI2_PHY_CFG); reg = isp_reg_readl(csi2->isp, phy->cfg_regs, ISPCSI2_PHY_CFG);
for (i = 0; i < phy->num_data_lanes; i++) { for (i = 0; i < num_data_lanes; i++) {
reg &= ~(ISPCSI2_PHY_CFG_DATA_POL_MASK(i + 1) | reg &= ~(ISPCSI2_PHY_CFG_DATA_POL_MASK(i + 1) |
ISPCSI2_PHY_CFG_DATA_POSITION_MASK(i + 1)); ISPCSI2_PHY_CFG_DATA_POSITION_MASK(i + 1));
reg |= (lanes->data[i].pol << reg |= (lanes->data[i].pol <<
......
...@@ -114,10 +114,13 @@ struct isp_ccp2_cfg { ...@@ -114,10 +114,13 @@ struct isp_ccp2_cfg {
/** /**
* struct isp_csi2_cfg - CSI2 interface configuration * struct isp_csi2_cfg - CSI2 interface configuration
* @crc: Enable the cyclic redundancy check * @crc: Enable the cyclic redundancy check
* @lanecfg: CSI-2 lane configuration
* @num_data_lanes: The number of data lanes in use
*/ */
struct isp_csi2_cfg { struct isp_csi2_cfg {
unsigned crc:1; unsigned crc:1;
struct isp_csiphy_lanes_cfg lanecfg; struct isp_csiphy_lanes_cfg lanecfg;
u8 num_data_lanes;
}; };
struct isp_bus_cfg { struct isp_bus_cfg {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment