Skip to content

Commit

Permalink
OMAPDSS: DSI: count with number of lanes
Browse files Browse the repository at this point in the history
DSI driver currently counts used lanes and number of supported lanes by
using the number of data lanes (i.e. excluding clock lane). This patch
changes this to use the number of all lanes so that the following lane
config patches are cleaner.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed Dec 2, 2011
1 parent b6a44e7 commit d982085
Showing 1 changed file with 22 additions and 27 deletions.
49 changes: 22 additions & 27 deletions drivers/video/omap2/dss/dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ struct dsi_data {
unsigned long fint_min, fint_max;
unsigned long lpdiv_max;

int num_data_lanes;
unsigned num_lanes_supported;

unsigned scp_clk_refcount;
};
Expand Down Expand Up @@ -2029,19 +2029,8 @@ static int dsi_cio_power(struct platform_device *dsidev,
return 0;
}

/* Number of data lanes present on DSI interface */
static inline int dsi_get_num_data_lanes(struct platform_device *dsidev)
{
/* DSI on OMAP3 doesn't have register DSI_GNQ, set number
* of data lanes as 2 by default */
if (dss_has_feature(FEAT_DSI_GNQ))
return REG_GET(dsidev, DSI_GNQ, 11, 9); /* NB_DATA_LANES */
else
return 2;
}

/* Number of data lanes used by the dss device */
static inline int dsi_get_num_data_lanes_dssdev(struct omap_dss_device *dssdev)
/* Number of lanes used by the dss device */
static inline int dsi_get_num_lanes_used(struct omap_dss_device *dssdev)
{
int num_data_lanes = 0;

Expand All @@ -2054,7 +2043,7 @@ static inline int dsi_get_num_data_lanes_dssdev(struct omap_dss_device *dssdev)
if (dssdev->phy.dsi.data4_lane != 0)
num_data_lanes++;

return num_data_lanes;
return num_data_lanes + 1;
}

static unsigned dsi_get_line_buf_size(struct platform_device *dsidev)
Expand Down Expand Up @@ -2092,7 +2081,7 @@ static void dsi_set_lane_config(struct omap_dss_device *dssdev)
{
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
u32 r;
int num_data_lanes_dssdev = dsi_get_num_data_lanes_dssdev(dssdev);
int num_lanes_used = dsi_get_num_lanes_used(dssdev);

int clk_lane = dssdev->phy.dsi.clk_lane;
int data1_lane = dssdev->phy.dsi.data1_lane;
Expand All @@ -2108,14 +2097,14 @@ static void dsi_set_lane_config(struct omap_dss_device *dssdev)
r = FLD_MOD(r, data1_pol, 7, 7);
r = FLD_MOD(r, data2_lane, 10, 8);
r = FLD_MOD(r, data2_pol, 11, 11);
if (num_data_lanes_dssdev > 2) {
if (num_lanes_used > 3) {
int data3_lane = dssdev->phy.dsi.data3_lane;
int data3_pol = dssdev->phy.dsi.data3_pol;

r = FLD_MOD(r, data3_lane, 14, 12);
r = FLD_MOD(r, data3_pol, 15, 15);
}
if (num_data_lanes_dssdev > 3) {
if (num_lanes_used > 4) {
int data4_lane = dssdev->phy.dsi.data4_lane;
int data4_pol = dssdev->phy.dsi.data4_pol;

Expand Down Expand Up @@ -2247,7 +2236,7 @@ static void dsi_cio_enable_lane_override(struct omap_dss_device *dssdev,
int data4_pol = dssdev->phy.dsi.data4_pol;

u32 l = 0;
u8 lptxscp_start = dsi->num_data_lanes == 2 ? 22 : 26;
u8 lptxscp_start = dsi->num_lanes_supported == 3 ? 22 : 26;

if (lanes & DSI_CLK_P)
l |= 1 << ((clk_lane - 1) * 2 + (clk_pol ? 0 : 1));
Expand Down Expand Up @@ -2385,7 +2374,7 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
struct platform_device *dsidev = dsi_get_dsidev_from_dssdev(dssdev);
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
int r;
int num_data_lanes_dssdev = dsi_get_num_data_lanes_dssdev(dssdev);
int num_lanes_used = dsi_get_num_lanes_used(dssdev);
u32 l;

DSSDBGF();
Expand Down Expand Up @@ -2430,10 +2419,10 @@ static int dsi_cio_init(struct omap_dss_device *dssdev)
* manually.
*/

if (num_data_lanes_dssdev > 2)
if (num_lanes_used > 3)
lane_mask |= DSI_DATA3_P;

if (num_data_lanes_dssdev > 3)
if (num_lanes_used > 4)
lane_mask |= DSI_DATA4_P;

dsi_cio_enable_lane_override(dssdev, lane_mask);
Expand Down Expand Up @@ -3852,7 +3841,7 @@ static void dsi_proto_timings(struct omap_dss_device *dssdev)
unsigned ddr_clk_pre, ddr_clk_post;
unsigned enter_hs_mode_lat, exit_hs_mode_lat;
unsigned ths_eot;
int ndl = dsi_get_num_data_lanes_dssdev(dssdev);
int ndl = dsi_get_num_lanes_used(dssdev) - 1;
u32 r;

r = dsi_read_reg(dsidev, DSI_DSIPHY_CFG0);
Expand Down Expand Up @@ -4552,9 +4541,9 @@ int dsi_init_display(struct omap_dss_device *dssdev)
dsi->vdds_dsi_reg = vdds_dsi;
}

if (dsi_get_num_data_lanes_dssdev(dssdev) > dsi->num_data_lanes) {
DSSERR("DSI%d can't support more than %d data lanes\n",
dsi_module + 1, dsi->num_data_lanes);
if (dsi_get_num_lanes_used(dssdev) > dsi->num_lanes_supported) {
DSSERR("DSI%d can't support more than %d lanes\n",
dsi_module + 1, dsi->num_lanes_supported);
return -EINVAL;
}

Expand Down Expand Up @@ -4780,7 +4769,13 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
dev_dbg(&dsidev->dev, "OMAP DSI rev %d.%d\n",
FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));

dsi->num_data_lanes = dsi_get_num_data_lanes(dsidev);
/* DSI on OMAP3 doesn't have register DSI_GNQ, set number
* of data to 3 by default */
if (dss_has_feature(FEAT_DSI_GNQ))
/* NB_DATA_LANES */
dsi->num_lanes_supported = 1 + REG_GET(dsidev, DSI_GNQ, 11, 9);
else
dsi->num_lanes_supported = 3;

dsi_runtime_put(dsidev);

Expand Down

0 comments on commit d982085

Please sign in to comment.