mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Sakari Ailus <sakari.ailus@linux.intel.com> Tested-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
838a6c5618
commit
3a738c3fd8
3 changed files with 18 additions and 6 deletions
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
/* 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 {
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
|
|
Loading…
Add table
Reference in a new issue