diff --git a/msm/dp/dp_catalog.c b/msm/dp/dp_catalog.c index cf3f89005f9a..e3cda301dab8 100644 --- a/msm/dp/dp_catalog.c +++ b/msm/dp/dp_catalog.c @@ -51,6 +51,14 @@ parser->get_io_buf(parser, #x); \ } +#define dp_read(x) ({ \ + catalog->read(catalog, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->write(catalog, io_data, x, y); \ +}) + static u8 const vm_pre_emphasis[4][4] = { {0x00, 0x0B, 0x12, 0xFF}, /* pe0, 0 db */ {0x00, 0x0A, 0x12, 0xFF}, /* pe1, 3.5 db */ @@ -71,34 +79,93 @@ enum dp_flush_bit { DP_DHDR_FLUSH, }; -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; - struct dp_io_data *dp_tcsr; -}; - /* audio related catalog functions */ struct dp_catalog_private { struct device *dev; struct dp_catalog_io io; struct dp_parser *parser; + u32 (*read)(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset); + void (*write)(struct dp_catalog_private *catlog, + struct dp_io_data *io_data, u32 offset, u32 data); + u32 (*audio_map)[DP_AUDIO_SDP_HEADER_MAX]; struct dp_catalog dp_catalog; char exe_mode[SZ_4]; }; +static u32 dp_read_sw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset) +{ + u32 data = 0; + + if (io_data->buf) + memcpy(&data, io_data->buf + offset, sizeof(offset)); + + return data; +} + +static void dp_write_sw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + if (io_data->buf) + memcpy(io_data->buf + offset, &data, sizeof(data)); +} + +static u32 dp_read_hw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset) +{ + u32 data = 0; + + data = readl_relaxed(io_data->io.base + offset); + + return data; +} + +static void dp_write_hw(struct dp_catalog_private *catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + writel_relaxed(data, io_data->io.base + offset); +} + +static u32 dp_read_sub_sw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + return dp_read_sw(catalog, io_data, offset); +} + +static void dp_write_sub_sw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + dp_write_sw(catalog, io_data, offset, data); +} + +static u32 dp_read_sub_hw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + return dp_read_hw(catalog, io_data, offset); +} + +static void dp_write_sub_hw(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data) +{ + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); + + dp_write_hw(catalog, io_data, offset, data); +} + /* aux related catalog functions */ static u32 dp_catalog_aux_read_data(struct dp_catalog_aux *aux) { @@ -113,7 +180,7 @@ static u32 dp_catalog_aux_read_data(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - return dp_read(catalog->exe_mode, io_data, DP_AUX_DATA); + return dp_read(DP_AUX_DATA); end: return 0; } @@ -133,7 +200,7 @@ static int dp_catalog_aux_write_data(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - dp_write(catalog->exe_mode, io_data, DP_AUX_DATA, aux->data); + dp_write(DP_AUX_DATA, aux->data); end: return rc; } @@ -153,7 +220,7 @@ static int dp_catalog_aux_write_trans(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, aux->data); + dp_write(DP_AUX_TRANS_CTRL, aux->data); end: return rc; } @@ -175,11 +242,11 @@ static int dp_catalog_aux_clear_trans(struct dp_catalog_aux *aux, bool read) io_data = catalog->io.dp_aux; if (read) { - data = dp_read(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL); + data = dp_read(DP_AUX_TRANS_CTRL); data &= ~BIT(9); - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, data); + dp_write(DP_AUX_TRANS_CTRL, data); } else { - dp_write(catalog->exe_mode, io_data, DP_AUX_TRANS_CTRL, 0); + dp_write(DP_AUX_TRANS_CTRL, 0); } end: return rc; @@ -199,13 +266,13 @@ static void dp_catalog_aux_clear_hw_interrupts(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_phy; - data = dp_read(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_STATUS); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0x9f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR, 0); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR, 0); wmb(); /* make sure register is cleared */ } @@ -223,15 +290,15 @@ static void dp_catalog_aux_reset(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - aux_ctrl = dp_read(catalog->exe_mode, io_data, DP_AUX_CTRL); + aux_ctrl = dp_read(DP_AUX_CTRL); aux_ctrl |= BIT(1); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); usleep_range(1000, 1010); /* h/w recommended delay */ aux_ctrl &= ~BIT(1); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); wmb(); /* make sure AUX reset is done here */ } @@ -249,18 +316,18 @@ static void dp_catalog_aux_enable(struct dp_catalog_aux *aux, bool enable) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_aux; - aux_ctrl = dp_read(catalog->exe_mode, io_data, DP_AUX_CTRL); + aux_ctrl = dp_read(DP_AUX_CTRL); if (enable) { aux_ctrl |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); wmb(); /* make sure AUX module is enabled */ - dp_write(catalog->exe_mode, io_data, DP_TIMEOUT_COUNT, 0xffff); - dp_write(catalog->exe_mode, io_data, DP_AUX_LIMITS, 0xffff); + dp_write(DP_TIMEOUT_COUNT, 0xffff); + dp_write(DP_AUX_LIMITS, 0xffff); } else { aux_ctrl &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_AUX_CTRL, aux_ctrl); + dp_write(DP_AUX_CTRL, aux_ctrl); } } @@ -286,8 +353,7 @@ static void dp_catalog_aux_update_cfg(struct dp_catalog_aux *aux, dp_phy_aux_config_type_to_string(type), cfg[type].lut[current_index], cfg[type].lut[new_index]); - dp_write(catalog->exe_mode, io_data, cfg[type].offset, - cfg[type].lut[new_index]); + dp_write(cfg[type].offset, cfg[type].lut[new_index]); cfg[type].current_index = new_index; } @@ -306,31 +372,28 @@ static void dp_catalog_aux_setup(struct dp_catalog_aux *aux, catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x65); + dp_write(DP_PHY_PD_CTL, 0x65); wmb(); /* make sure PD programming happened */ /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io.dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x1b); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x1b); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x02); + dp_write(DP_PHY_PD_CTL, 0x02); wmb(); /* make sure PD programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x7d); + dp_write(DP_PHY_PD_CTL, 0x7d); /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io.dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x3f); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x3f); /* DP AUX CFG register programming */ io_data = catalog->io.dp_phy; for (i = 0; i < PHY_AUX_CFG_MAX; i++) - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK, 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK, 0x1F); wmb(); /* make sure AUX configuration is done before enabling it */ } @@ -348,12 +411,12 @@ static void dp_catalog_aux_get_irq(struct dp_catalog_aux *aux, bool cmd_busy) catalog = dp_catalog_get_priv(aux); io_data = catalog->io.dp_ahb; - aux->isr = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS); + aux->isr = dp_read(DP_INTR_STATUS); aux->isr &= ~DP_INTR_MASK1; ack = aux->isr & DP_INTERRUPT_STATUS1; ack <<= 1; ack |= DP_INTR_MASK1; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, ack); + dp_write(DP_INTR_STATUS, ack); } static bool dp_catalog_ctrl_wait_for_phy_ready( @@ -415,20 +478,18 @@ static int dp_catalog_ctrl_late_phy_init(struct dp_catalog_ctrl *ctrl, } io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_HIGHZ_DRVR_EN_V420, drvr0_en); - dp_write(catalog->exe_mode, io_data, - TXn_TRANSCEIVER_BIAS_EN_V420, bias0_en); + dp_write(TXn_HIGHZ_DRVR_EN_V420, drvr0_en); + dp_write(TXn_TRANSCEIVER_BIAS_EN_V420, bias0_en); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_HIGHZ_DRVR_EN_V420, drvr1_en); - dp_write(catalog->exe_mode, io_data, - TXn_TRANSCEIVER_BIAS_EN_V420, bias1_en); + dp_write(TXn_HIGHZ_DRVR_EN_V420, drvr1_en); + dp_write(TXn_TRANSCEIVER_BIAS_EN_V420, bias1_en); io_data = catalog->io.dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_CFG, 0x18); + dp_write(DP_PHY_CFG, 0x18); /* add hardware recommended delay */ udelay(2000); - dp_write(catalog->exe_mode, io_data, DP_PHY_CFG, 0x19); + dp_write(DP_PHY_CFG, 0x19); /* * Make sure all the register writes are completed before @@ -442,19 +503,19 @@ static int dp_catalog_ctrl_late_phy_init(struct dp_catalog_ctrl *ctrl, } io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, 0x0a); + dp_write(TXn_TX_POL_INV_V420, 0x0a); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, 0x0a); + dp_write(TXn_TX_POL_INV_V420, 0x0a); io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x27); + dp_write(TXn_TX_DRV_LVL_V420, 0x27); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x27); + dp_write(TXn_TX_DRV_LVL_V420, 0x27); io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Make sure the PHY register writes are done */ wmb(); lock_err: @@ -474,7 +535,7 @@ static u32 dp_catalog_ctrl_read_hdcp_status(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - return dp_read(catalog->exe_mode, io_data, DP_HDCP_STATUS); + return dp_read(DP_HDCP_STATUS); } static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) @@ -484,7 +545,7 @@ static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) u32 sdp_cfg3_off = 0; if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return; } @@ -494,10 +555,8 @@ static void dp_catalog_panel_sdp_update(struct dp_catalog_panel *panel) catalog = dp_catalog_get_priv(panel); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG3 + sdp_cfg3_off, - 0x01); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG3 + sdp_cfg3_off, - 0x00); + dp_write(MMSS_DP_SDP_CFG3 + sdp_cfg3_off, 0x01); + dp_write(MMSS_DP_SDP_CFG3 + sdp_cfg3_off, 0x00); } static void dp_catalog_panel_setup_vsif_infoframe_sdp( @@ -526,8 +585,7 @@ static void dp_catalog_panel_setup_vsif_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_0 + mst_offset, - data); + dp_write(MMSS_DP_VSCEXT_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -536,18 +594,15 @@ static void dp_catalog_panel_setup_vsif_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_1 + mst_offset, - data); + dp_write(MMSS_DP_VSCEXT_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->dhdr_vsif_sdp.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_VSCEXT_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_VSCEXT_1 + mst_offset, - data); + data |= dp_read(MMSS_DP_VSCEXT_1 + mst_offset); + dp_write(MMSS_DP_VSCEXT_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -583,7 +638,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_0 + mst_offset, + dp_write(MMSS_DP_GENERIC2_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -593,17 +648,15 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_1 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->shdr_if_sdp.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_VSCEXT_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_1 + mst_offset, + data |= dp_read(MMSS_DP_VSCEXT_1 + mst_offset); + dp_write(MMSS_DP_GENERIC2_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -611,8 +664,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( data = version; data |= length << 8; data |= hdr->eotf << 16; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_2 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_2 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -620,8 +672,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[0]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[0]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[0]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_3 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_3 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -629,8 +680,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[1]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[1]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[1]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_4 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_4 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -638,8 +688,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->display_primaries_x[2]) << 8) | (DP_GET_LSB(hdr->display_primaries_y[2]) << 16) | (DP_GET_MSB(hdr->display_primaries_y[2]) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_5 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_5 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -647,8 +696,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->white_point_x) << 8) | (DP_GET_LSB(hdr->white_point_y) << 16) | (DP_GET_MSB(hdr->white_point_y) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_6 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_6 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -656,8 +704,7 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->max_luminance) << 8) | (DP_GET_LSB(hdr->min_luminance) << 16) | (DP_GET_MSB(hdr->min_luminance) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_7 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_7 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -665,14 +712,12 @@ static void dp_catalog_panel_setup_hdr_infoframe_sdp( (DP_GET_MSB(hdr->max_content_light_level) << 8) | (DP_GET_LSB(hdr->max_average_light_level) << 16) | (DP_GET_MSB(hdr->max_average_light_level) << 24)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_8 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_8 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC2_9 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC2_9 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -709,8 +754,7 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_1_BIT) | (parity << PARITY_BYTE_1_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_0 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_0 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -719,39 +763,32 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_2_BIT) | (parity << PARITY_BYTE_2_BIT)); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_1 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_1 + mst_offset, data); /* HEADER BYTE 3 */ header = panel->vsc_colorimetry.header.HB3; parity = dp_header_get_parity(header); data = ((header << HEADER_BYTE_3_BIT) | (parity << PARITY_BYTE_3_BIT)); - data |= dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC0_1 + mst_offset); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_1 + mst_offset, - data); + data |= dp_read(MMSS_DP_GENERIC0_1 + mst_offset); + dp_write(MMSS_DP_GENERIC0_1 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_2 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_2 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_3 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_3 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_4 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_4 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_5 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_5 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -759,24 +796,20 @@ static void dp_catalog_panel_setup_vsc_sdp(struct dp_catalog_panel *panel) ((panel->vsc_colorimetry.data[17] & 0xFF) << 8) | ((panel->vsc_colorimetry.data[18] & 0x7) << 16); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_6 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_6 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); data = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_7 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_7 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_8 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_8 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC0_9 + mst_offset, - data); + dp_write(MMSS_DP_GENERIC0_9 + mst_offset, data); memcpy(buf + off, &data, sizeof(data)); off += sizeof(data); @@ -806,21 +839,17 @@ static void dp_catalog_panel_config_sdp(struct dp_catalog_panel *panel, sdp_cfg2_off = MMSS_DP1_SDP_CFG2 - MMSS_DP_SDP_CFG2; } - cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); - cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); + cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); if (en) { /* GEN0_SDP_EN */ cfg |= BIT(17); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE */ cfg2 |= BIT(16); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); /* setup the GENERIC0 in case of en = true */ dp_catalog_panel_setup_vsc_sdp(panel); @@ -828,13 +857,11 @@ static void dp_catalog_panel_config_sdp(struct dp_catalog_panel *panel, } else { /* GEN0_SDP_EN */ cfg &= ~BIT(17); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE */ cfg2 &= ~BIT(16); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); } dp_catalog_panel_sdp_update(panel); @@ -847,12 +874,12 @@ static void dp_catalog_panel_config_misc(struct dp_catalog_panel *panel) u32 reg_offset = 0; if (!panel) { - pr_err("invalid input\n"); + DP_ERR("invalid input\n"); return; } if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return; } @@ -863,8 +890,7 @@ static void dp_catalog_panel_config_misc(struct dp_catalog_panel *panel) reg_offset = DP1_MISC1_MISC0 - DP_MISC1_MISC0; DP_DEBUG("misc settings = 0x%x\n", panel->misc_val); - dp_write(catalog->exe_mode, io_data, DP_MISC1_MISC0 + reg_offset, - panel->misc_val); + dp_write(DP_MISC1_MISC0 + reg_offset, panel->misc_val); } static int dp_catalog_panel_set_colorspace(struct dp_catalog_panel *panel, @@ -874,12 +900,12 @@ bool vsc_supported) struct dp_io_data *io_data; if (!panel) { - pr_err("invalid input\n"); + DP_ERR("invalid input\n"); return -EINVAL; } if (panel->stream_id >= DP_STREAM_MAX) { - pr_err("invalid stream_id:%d\n", panel->stream_id); + DP_ERR("invalid stream_id:%d\n", panel->stream_id); return -EINVAL; } @@ -926,12 +952,9 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, misc1_misc0_off = DP1_MISC1_MISC0 - DP_MISC1_MISC0; } - cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); - cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); - misc = dp_read(catalog->exe_mode, io_data, - DP_MISC1_MISC0 + misc1_misc0_off); + cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); + cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + misc = dp_read(DP_MISC1_MISC0 + misc1_misc0_off); if (en) { if (dhdr_max_pkts) { @@ -939,20 +962,17 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, cfg |= BIT(16); /* DHDR_EN, DHDR_PACKET_LIMIT */ cfg4 = (dhdr_max_pkts << 1) | BIT(0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG4 - + sdp_cfg4_off, cfg4); + dp_write(MMSS_DP_SDP_CFG4 + sdp_cfg4_off, cfg4); dp_catalog_panel_setup_vsif_infoframe_sdp(panel); } /* GEN2_SDP_EN */ cfg |= BIT(19); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC2_SDPSIZE */ cfg2 |= BIT(20); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); dp_catalog_panel_setup_hdr_infoframe_sdp(panel); @@ -963,18 +983,15 @@ static void dp_catalog_panel_config_hdr(struct dp_catalog_panel *panel, bool en, } else { /* VSCEXT_SDP_ENG */ cfg &= ~BIT(16) & ~BIT(19); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, cfg); /* GENERIC0_SDPSIZE GENERIC2_SDPSIZE */ cfg2 &= ~BIT(20); - dp_write(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, cfg2); /* DHDR_EN, DHDR_PACKET_LIMIT */ cfg4 = 0; - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG4 - + sdp_cfg4_off, cfg4); + dp_write(MMSS_DP_SDP_CFG4 + sdp_cfg4_off, cfg4); DP_DEBUG("Disabled\n"); } @@ -999,11 +1016,9 @@ static void dp_catalog_panel_update_transfer_unit( catalog = dp_catalog_get_priv(panel); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_VALID_BOUNDARY, - panel->valid_boundary); - dp_write(catalog->exe_mode, io_data, DP_TU, panel->dp_tu); - dp_write(catalog->exe_mode, io_data, DP_VALID_BOUNDARY_2, - panel->valid_boundary2); + dp_write(DP_VALID_BOUNDARY, panel->valid_boundary); + dp_write(DP_TU, panel->dp_tu); + dp_write(DP_VALID_BOUNDARY_2, panel->valid_boundary2); } static void dp_catalog_ctrl_state_ctrl(struct dp_catalog_ctrl *ctrl, u32 state) @@ -1019,7 +1034,7 @@ static void dp_catalog_ctrl_state_ctrl(struct dp_catalog_ctrl *ctrl, u32 state) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, state); + dp_write(DP_STATE_CTRL, state); /* make sure to change the hw state */ wmb(); } @@ -1038,14 +1053,14 @@ static void dp_catalog_ctrl_config_ctrl(struct dp_catalog_ctrl *ctrl, u8 ln_cnt) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - cfg = dp_read(catalog->exe_mode, io_data, DP_CONFIGURATION_CTRL); + cfg = dp_read(DP_CONFIGURATION_CTRL); cfg &= ~(BIT(4) | BIT(5)); cfg |= (ln_cnt - 1) << 4; - dp_write(catalog->exe_mode, io_data, DP_CONFIGURATION_CTRL, cfg); + dp_write(DP_CONFIGURATION_CTRL, cfg); - cfg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + cfg = dp_read(DP_MAINLINK_CTRL); cfg |= 0x02000000; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, cfg); + dp_write(DP_MAINLINK_CTRL, cfg); DP_DEBUG("DP_MAINLINK_CTRL=0x%x\n", cfg); } @@ -1075,10 +1090,9 @@ static void dp_catalog_panel_config_ctrl(struct dp_catalog_panel *panel, DP_DEBUG("DP_CONFIGURATION_CTRL=0x%x\n", cfg); - dp_write(catalog->exe_mode, io_data, - DP_CONFIGURATION_CTRL + strm_reg_off, cfg); + dp_write(DP_CONFIGURATION_CTRL + strm_reg_off, cfg); - mainlink_ctrl = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + mainlink_ctrl = dp_read(DP_MAINLINK_CTRL); if (panel->stream_id == DP_STREAM_0) io_data = catalog->io.dp_p0; @@ -1086,11 +1100,9 @@ static void dp_catalog_panel_config_ctrl(struct dp_catalog_panel *panel, io_data = catalog->io.dp_p1; if (mainlink_ctrl & BIT(8)) - dp_write(catalog->exe_mode, io_data, MMSS_DP_ASYNC_FIFO_CONFIG, - 0x01); + dp_write(MMSS_DP_ASYNC_FIFO_CONFIG, 0x01); else - dp_write(catalog->exe_mode, io_data, MMSS_DP_ASYNC_FIFO_CONFIG, - 0x00); + dp_write(MMSS_DP_ASYNC_FIFO_CONFIG, 0x00); } static void dp_catalog_panel_config_dto(struct dp_catalog_panel *panel, @@ -1125,12 +1137,12 @@ static void dp_catalog_panel_config_dto(struct dp_catalog_panel *panel, return; } - dsc_dto = dp_read(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO); + dsc_dto = dp_read(MMSS_DP_DSC_DTO); if (ack) dsc_dto = BIT(1); else dsc_dto &= ~BIT(1); - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO, dsc_dto); + dp_write(MMSS_DP_DSC_DTO, dsc_dto); } static void dp_catalog_ctrl_lane_mapping(struct dp_catalog_ctrl *ctrl, @@ -1147,8 +1159,7 @@ static void dp_catalog_ctrl_lane_mapping(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_LOGICAL2PHYSICAL_LANE_MAPPING, - 0xe4); + dp_write(DP_LOGICAL2PHYSICAL_LANE_MAPPING, 0xe4); } static void dp_catalog_ctrl_lane_pnswap(struct dp_catalog_ctrl *ctrl, @@ -1169,10 +1180,10 @@ static void dp_catalog_ctrl_lane_pnswap(struct dp_catalog_ctrl *ctrl, cfg1 |= ((ln_pnswap >> 3) & 0x1) << 2; io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV, cfg0); + dp_write(TXn_TX_POL_INV, cfg0); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV, cfg1); + dp_write(TXn_TX_POL_INV, cfg1); } static void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog_ctrl *ctrl, @@ -1191,29 +1202,23 @@ static void dp_catalog_ctrl_mainlink_ctrl(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; if (enable) { - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); mainlink_ctrl = reg & ~(0x03); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink is turned off before reset */ mainlink_ctrl = reg | 0x02; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink entered reset */ mainlink_ctrl = reg & ~(0x03); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink reset done */ mainlink_ctrl = reg | 0x01; - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); wmb(); /* make sure mainlink turned on */ } else { - mainlink_ctrl = dp_read(catalog->exe_mode, io_data, - DP_MAINLINK_CTRL); + mainlink_ctrl = dp_read(DP_MAINLINK_CTRL); mainlink_ctrl &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, - mainlink_ctrl); + dp_write(DP_MAINLINK_CTRL, mainlink_ctrl); } } @@ -1246,10 +1251,8 @@ static void dp_catalog_panel_config_msa(struct dp_catalog_panel *panel, if (panel->stream_id == DP_STREAM_1) strm_reg_off = MMSS_DP_PIXEL1_M - MMSS_DP_PIXEL_M; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M + strm_reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N + strm_reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M + strm_reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N + strm_reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -1282,10 +1285,8 @@ static void dp_catalog_panel_config_msa(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_reg_off, - mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_reg_off, - nvid); + dp_write(DP_SOFTWARE_MVID + mvid_reg_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_reg_off, nvid); } static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl, @@ -1320,12 +1321,12 @@ static void dp_catalog_ctrl_set_pattern(struct dp_catalog_ctrl *ctrl, } DP_DEBUG("hw: bit=%d train=%d\n", bit, pattern); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, BIT(bit)); + dp_write(DP_STATE_CTRL, BIT(bit)); bit += link_training_offset; while (cnt--) { - data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + data = dp_read(DP_MAINLINK_READY); if (data & BIT(bit)) break; } @@ -1348,27 +1349,24 @@ static void dp_catalog_ctrl_usb_reset(struct dp_catalog_ctrl *ctrl, bool flip) io_data = catalog->io.usb3_dp_com; - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_RESET_OVRD_CTRL, 0x0a); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_PHY_MODE_CTRL, 0x02); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SW_RESET, 0x01); + dp_write(USB3_DP_COM_RESET_OVRD_CTRL, 0x0a); + dp_write(USB3_DP_COM_PHY_MODE_CTRL, 0x02); + dp_write(USB3_DP_COM_SW_RESET, 0x01); /* make sure usb3 com phy software reset is done */ wmb(); - if (!flip) { /* CC1 */ - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_TYPEC_CTRL, - 0x02); - } else { /* CC2 */ - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_TYPEC_CTRL, - 0x03); - } + if (!flip) /* CC1 */ + dp_write(USB3_DP_COM_TYPEC_CTRL, 0x02); + else /* CC2 */ + dp_write(USB3_DP_COM_TYPEC_CTRL, 0x03); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SWI_CTRL, 0x00); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_SW_RESET, 0x00); + dp_write(USB3_DP_COM_SWI_CTRL, 0x00); + dp_write(USB3_DP_COM_SW_RESET, 0x00); /* make sure the software reset is done */ wmb(); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_POWER_DOWN_CTRL, 0x01); - dp_write(catalog->exe_mode, io_data, USB3_DP_COM_RESET_OVRD_CTRL, 0x00); + dp_write(USB3_DP_COM_POWER_DOWN_CTRL, 0x01); + dp_write(USB3_DP_COM_RESET_OVRD_CTRL, 0x00); /* make sure phy is brought out of reset */ wmb(); } @@ -1397,46 +1395,40 @@ static void dp_catalog_panel_tpg_cfg(struct dp_catalog_panel *panel, io_data = catalog->io.dp_p1; if (!enable) { - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_MAIN_CONTROL, - 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_BIST_ENABLE, 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TIMING_ENGINE_EN, - 0x0); + dp_write(MMSS_DP_TPG_MAIN_CONTROL, 0x0); + dp_write(MMSS_DP_BIST_ENABLE, 0x0); + dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x0); wmb(); /* ensure Timing generator is turned off */ return; } - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG, 0x0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_HSYNC_CTL, + dp_write(MMSS_DP_INTF_CONFIG, 0x0); + dp_write(MMSS_DP_INTF_HSYNC_CTL, panel->hsync_ctl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PERIOD_F0, + dp_write(MMSS_DP_INTF_VSYNC_PERIOD_F0, panel->vsync_period * panel->hsync_period); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F0, + dp_write(MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F0, panel->v_sync_width * panel->hsync_period); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PERIOD_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F1, - 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_HCTL, - panel->display_hctl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_HCTL, 0); - dp_write(catalog->exe_mode, io_data, MMSS_INTF_DISPLAY_V_START_F0, - panel->display_v_start); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_V_END_F0, - panel->display_v_end); - dp_write(catalog->exe_mode, io_data, MMSS_INTF_DISPLAY_V_START_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_DISPLAY_V_END_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_START_F0, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_END_F0, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_START_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_ACTIVE_V_END_F1, 0); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_POLARITY_CTL, 0); + dp_write(MMSS_DP_INTF_VSYNC_PERIOD_F1, 0); + dp_write(MMSS_DP_INTF_VSYNC_PULSE_WIDTH_F1, 0); + dp_write(MMSS_DP_INTF_DISPLAY_HCTL, panel->display_hctl); + dp_write(MMSS_DP_INTF_ACTIVE_HCTL, 0); + dp_write(MMSS_INTF_DISPLAY_V_START_F0, panel->display_v_start); + dp_write(MMSS_DP_INTF_DISPLAY_V_END_F0, panel->display_v_end); + dp_write(MMSS_INTF_DISPLAY_V_START_F1, 0); + dp_write(MMSS_DP_INTF_DISPLAY_V_END_F1, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_START_F0, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_END_F0, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_START_F1, 0); + dp_write(MMSS_DP_INTF_ACTIVE_V_END_F1, 0); + dp_write(MMSS_DP_INTF_POLARITY_CTL, 0); wmb(); /* ensure TPG registers are programmed */ - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_MAIN_CONTROL, 0x100); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TPG_VIDEO_CONFIG, 0x5); + dp_write(MMSS_DP_TPG_MAIN_CONTROL, 0x100); + dp_write(MMSS_DP_TPG_VIDEO_CONFIG, 0x5); wmb(); /* ensure TPG config is programmed */ - dp_write(catalog->exe_mode, io_data, MMSS_DP_BIST_ENABLE, 0x1); - dp_write(catalog->exe_mode, io_data, MMSS_DP_TIMING_ENGINE_EN, 0x1); + dp_write(MMSS_DP_BIST_ENABLE, 0x1); + dp_write(MMSS_DP_TIMING_ENGINE_EN, 0x1); wmb(); /* ensure Timing generator is turned on */ } @@ -1464,16 +1456,15 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) else io_data = catalog->io.dp_p1; - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO_COUNT, - panel->dsc.dto_count); + dp_write(MMSS_DP_DSC_DTO_COUNT, panel->dsc.dto_count); - reg = dp_read(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO); + reg = dp_read(MMSS_DP_DSC_DTO); if (panel->dsc.dto_en) { reg |= BIT(0); reg |= (panel->dsc.dto_n << 8); reg |= (panel->dsc.dto_d << 16); } - dp_write(catalog->exe_mode, io_data, MMSS_DP_DSC_DTO, reg); + dp_write(MMSS_DP_DSC_DTO, reg); io_data = catalog->io.dp_link; @@ -1482,17 +1473,15 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) else offset = DP1_COMPRESSION_MODE_CTRL - DP_COMPRESSION_MODE_CTRL; - dp_write(catalog->exe_mode, io_data, DP_PPS_HB_0_3 + offset, 0x7F1000); - dp_write(catalog->exe_mode, io_data, DP_PPS_PB_0_3 + offset, 0xA22300); + dp_write(DP_PPS_HB_0_3 + offset, 0x7F1000); + dp_write(DP_PPS_PB_0_3 + offset, 0xA22300); for (i = 0; i < panel->dsc.parity_word_len; i++) - dp_write(catalog->exe_mode, io_data, - DP_PPS_PB_4_7 + (i << 2) + offset, + dp_write(DP_PPS_PB_4_7 + (i << 2) + offset, panel->dsc.parity_word[i]); for (i = 0; i < panel->dsc.pps_word_len; i++) - dp_write(catalog->exe_mode, io_data, - DP_PPS_PPS_0_3 + (i << 2) + offset, + dp_write(DP_PPS_PPS_0_3 + (i << 2) + offset, panel->dsc.pps_word[i]); reg = 0; @@ -1503,8 +1492,7 @@ static void dp_catalog_panel_dsc_cfg(struct dp_catalog_panel *panel) reg |= (panel->dsc.bytes_per_pkt << 16); reg |= (panel->dsc.be_in_lane << 10); } - dp_write(catalog->exe_mode, io_data, - DP_COMPRESSION_MODE_CTRL + offset, reg); + dp_write(DP_COMPRESSION_MODE_CTRL + offset, reg); DP_DEBUG("compression:0x%x for stream:%d\n", reg, panel->stream_id); @@ -1535,9 +1523,9 @@ static void dp_catalog_panel_dp_flush(struct dp_catalog_panel *panel, else offset = MMSS_DP1_FLUSH - MMSS_DP_FLUSH; - dp_flush = dp_read(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset); + dp_flush = dp_read(MMSS_DP_FLUSH + offset); dp_flush |= BIT(flush_bit); - dp_write(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset, dp_flush); + dp_write(MMSS_DP_FLUSH + offset, dp_flush); } static void dp_catalog_panel_pps_flush(struct dp_catalog_panel *panel) @@ -1572,7 +1560,7 @@ static bool dp_catalog_panel_dhdr_busy(struct dp_catalog_panel *panel) else offset = MMSS_DP1_FLUSH - MMSS_DP_FLUSH; - dp_flush = dp_read(catalog->exe_mode, io_data, MMSS_DP_FLUSH + offset); + dp_flush = dp_read(MMSS_DP_FLUSH + offset); return dp_flush & BIT(DP_DHDR_FLUSH) ? true : false; } @@ -1591,14 +1579,14 @@ static void dp_catalog_ctrl_reset(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - sw_reset = dp_read(catalog->exe_mode, io_data, DP_SW_RESET); + sw_reset = dp_read(DP_SW_RESET); sw_reset |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); usleep_range(1000, 1010); /* h/w recommended delay */ sw_reset &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); } static bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog_ctrl *ctrl) @@ -1618,7 +1606,7 @@ static bool dp_catalog_ctrl_mainlink_ready(struct dp_catalog_ctrl *ctrl) while (--cnt) { /* DP_MAINLINK_READY */ - data = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + data = dp_read(DP_MAINLINK_READY); if (data & BIT(0)) return true; @@ -1644,16 +1632,13 @@ static void dp_catalog_ctrl_enable_irq(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_ahb; if (enable) { - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, - DP_INTR_MASK1); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, - DP_INTR_MASK2); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, - DP_INTR_MASK5); + dp_write(DP_INTR_STATUS, DP_INTR_MASK1); + dp_write(DP_INTR_STATUS2, DP_INTR_MASK2); + dp_write(DP_INTR_STATUS5, DP_INTR_MASK5); } else { - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS, 0x00); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, 0x00); - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, 0x00); + dp_write(DP_INTR_STATUS, 0x00); + dp_write(DP_INTR_STATUS2, 0x00); + dp_write(DP_INTR_STATUS5, 0x00); } } @@ -1671,19 +1656,19 @@ static void dp_catalog_ctrl_get_interrupt(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - ctrl->isr = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS2); + ctrl->isr = dp_read(DP_INTR_STATUS2); ctrl->isr &= ~DP_INTR_MASK2; ack = ctrl->isr & DP_INTERRUPT_STATUS2; ack <<= 1; ack |= DP_INTR_MASK2; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS2, ack); + dp_write(DP_INTR_STATUS2, ack); - ctrl->isr5 = dp_read(catalog->exe_mode, io_data, DP_INTR_STATUS5); + ctrl->isr5 = dp_read(DP_INTR_STATUS5); ctrl->isr5 &= ~DP_INTR_MASK5; ack = ctrl->isr5 & DP_INTERRUPT_STATUS5; ack <<= 1; ack |= DP_INTR_MASK5; - dp_write(catalog->exe_mode, io_data, DP_INTR_STATUS5, ack); + dp_write(DP_INTR_STATUS5, ack); } static void dp_catalog_ctrl_phy_reset(struct dp_catalog_ctrl *ctrl) @@ -1699,9 +1684,9 @@ static void dp_catalog_ctrl_phy_reset(struct dp_catalog_ctrl *ctrl) catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_ahb; - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x5); /* bit 0 & 2 */ + dp_write(DP_PHY_CTRL, 0x5); /* bit 0 & 2 */ usleep_range(1000, 1010); /* h/w recommended delay */ - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x0); + dp_write(DP_PHY_CTRL, 0x0); wmb(); /* make sure PHY reset done */ } @@ -1726,7 +1711,7 @@ static void dp_catalog_ctrl_phy_lane_cfg(struct dp_catalog_ctrl *ctrl, info |= ((orientation & 0x0F) << 4); DP_DEBUG("Shared Info = 0x%x\n", info); - dp_write(catalog->exe_mode, io_data, DP_PHY_SPARE0, info); + dp_write(DP_PHY_SPARE0, info); } static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, @@ -1751,12 +1736,12 @@ static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, /* program default setting first */ io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Enable MUX to use Cursor values from these registers */ value0 |= BIT(5); @@ -1765,14 +1750,12 @@ static void dp_catalog_ctrl_update_vx_px(struct dp_catalog_ctrl *ctrl, /* Configure host and panel only if both values are allowed */ if (value0 != 0xFF && value1 != 0xFF) { io_data = catalog->io.dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); io_data = catalog->io.dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL, value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); DP_DEBUG("hw: vx_value=0x%x px_value=0x%x\n", value0, value1); @@ -1798,58 +1781,51 @@ static void dp_catalog_ctrl_send_phy_pattern(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x0); + dp_write(DP_STATE_CTRL, 0x0); switch (pattern) { case DP_TEST_PHY_PATTERN_D10_2_NO_SCRAMBLING: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x1); + dp_write(DP_STATE_CTRL, 0x1); break; case DP_TEST_PHY_PATTERN_SYMBOL_ERR_MEASUREMENT_CNT: value &= ~(1 << 16); - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); value |= 0xFC; - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, 0x2); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x10); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_MAINLINK_LEVELS, 0x2); + dp_write(DP_STATE_CTRL, 0x10); break; case DP_TEST_PHY_PATTERN_PRBS7: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x20); + dp_write(DP_STATE_CTRL, 0x20); break; case DP_TEST_PHY_PATTERN_80_BIT_CUSTOM_PATTERN: - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x40); + dp_write(DP_STATE_CTRL, 0x40); /* 00111110000011111000001111100000 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG0, 0x3E0F83E0); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG0, 0x3E0F83E0); /* 00001111100000111110000011111000 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG1, 0x0F83E0F8); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG1, 0x0F83E0F8); /* 1111100000111110 */ - dp_write(catalog->exe_mode, io_data, - DP_TEST_80BIT_CUSTOM_PATTERN_REG2, 0x0000F83E); + dp_write(DP_TEST_80BIT_CUSTOM_PATTERN_REG2, 0x0000F83E); break; case DP_TEST_PHY_PATTERN_CP2520_PATTERN_1: - value = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + value = dp_read(DP_MAINLINK_CTRL); value &= ~BIT(4); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, value); + dp_write(DP_MAINLINK_CTRL, value); value = BIT(16); - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); value |= 0xFC; - dp_write(catalog->exe_mode, io_data, - DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, 0x2); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x10); + dp_write(DP_HBR2_COMPLIANCE_SCRAMBLER_RESET, value); + dp_write(DP_MAINLINK_LEVELS, 0x2); + dp_write(DP_STATE_CTRL, 0x10); - value = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + value = dp_read(DP_MAINLINK_CTRL); value |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, value); + dp_write(DP_MAINLINK_CTRL, value); break; case DP_TEST_PHY_PATTERN_CP2520_PATTERN_3: - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, 0x11); - dp_write(catalog->exe_mode, io_data, DP_STATE_CTRL, 0x8); + dp_write(DP_MAINLINK_CTRL, 0x11); + dp_write(DP_STATE_CTRL, 0x8); break; default: DP_DEBUG("No valid test pattern requested: 0x%x\n", pattern); @@ -1874,7 +1850,7 @@ static u32 dp_catalog_ctrl_read_phy_pattern(struct dp_catalog_ctrl *ctrl) io_data = catalog->io.dp_link; - return dp_read(catalog->exe_mode, io_data, DP_MAINLINK_READY); + return dp_read(DP_MAINLINK_READY); } static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, @@ -1892,7 +1868,7 @@ static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv(ctrl); io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); /* * fec_en = BIT(12) @@ -1905,7 +1881,7 @@ static void dp_catalog_ctrl_fec_config(struct dp_catalog_ctrl *ctrl, else reg &= ~BIT(12); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, reg); + dp_write(DP_MAINLINK_CTRL, reg); /* make sure mainlink configuration is updated with fec sequence */ wmb(); } @@ -1987,13 +1963,13 @@ static void dp_catalog_ctrl_mst_config(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MAINLINK_CTRL); + reg = dp_read(DP_MAINLINK_CTRL); if (enable) reg |= (0x04000100); else reg &= ~(0x04000100); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_CTRL, reg); + dp_write(DP_MAINLINK_CTRL, reg); /* make sure mainlink MST configuration is updated */ wmb(); } @@ -2012,7 +1988,7 @@ static void dp_catalog_ctrl_trigger_act(struct dp_catalog_ctrl *ctrl) io_data = catalog->io.dp_link; - dp_write(catalog->exe_mode, io_data, DP_MST_ACT, 0x1); + dp_write(DP_MST_ACT, 0x1); /* make sure ACT signal is performed */ wmb(); } @@ -2035,7 +2011,7 @@ static void dp_catalog_ctrl_read_act_complete_sts(struct dp_catalog_ctrl *ctrl, io_data = catalog->io.dp_link; - reg = dp_read(catalog->exe_mode, io_data, DP_MST_ACT); + reg = dp_read(DP_MST_ACT); if (!reg) *sts = true; @@ -2091,10 +2067,8 @@ static void dp_catalog_ctrl_channel_alloc(struct dp_catalog_ctrl *ctrl, DP_DEBUG("ch:%d slot_reg_1:%d, slot_reg_2:%d\n", ch, slot_reg_1, slot_reg_2); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_1_32 + reg_off, - slot_reg_1); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_33_63 + reg_off, - slot_reg_2); + dp_write(DP_DP0_TIMESLOT_1_32 + reg_off, slot_reg_1); + dp_write(DP_DP0_TIMESLOT_33_63 + reg_off, slot_reg_2); } static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, @@ -2127,10 +2101,8 @@ static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, if (ch == DP_STREAM_1) reg_off = DP_DP1_TIMESLOT_1_32 - DP_DP0_TIMESLOT_1_32; - slot_reg_1 = dp_read(catalog->exe_mode, io_data, - DP_DP0_TIMESLOT_1_32 + reg_off); - slot_reg_2 = dp_read(catalog->exe_mode, io_data, - DP_DP0_TIMESLOT_33_63 + reg_off); + slot_reg_1 = dp_read(DP_DP0_TIMESLOT_1_32 + reg_off); + slot_reg_2 = dp_read(DP_DP0_TIMESLOT_33_63 + reg_off); ch_start_slot = ch_start_slot - 1; for (i = 0; i < tot_slot_cnt; i++) { @@ -2146,10 +2118,8 @@ static void dp_catalog_ctrl_channel_dealloc(struct dp_catalog_ctrl *ctrl, DP_DEBUG("dealloc ch:%d slot_reg_1:%d, slot_reg_2:%d\n", ch, slot_reg_1, slot_reg_2); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_1_32 + reg_off, - slot_reg_1); - dp_write(catalog->exe_mode, io_data, DP_DP0_TIMESLOT_33_63 + reg_off, - slot_reg_2); + dp_write(DP_DP0_TIMESLOT_1_32 + reg_off, slot_reg_1); + dp_write(DP_DP0_TIMESLOT_33_63 + reg_off, slot_reg_2); } static void dp_catalog_ctrl_update_rg(struct dp_catalog_ctrl *ctrl, u32 ch, @@ -2177,7 +2147,7 @@ static void dp_catalog_ctrl_update_rg(struct dp_catalog_ctrl *ctrl, u32 ch, if (ch == DP_STREAM_1) reg_off = DP_DP1_RG - DP_DP0_RG; - dp_write(catalog->exe_mode, io_data, DP_DP0_RG + reg_off, rg); + dp_write(DP_DP0_RG + reg_off, rg); } static void dp_catalog_ctrl_mainlink_levels(struct dp_catalog_ctrl *ctrl, @@ -2207,16 +2177,14 @@ static void dp_catalog_ctrl_mainlink_levels(struct dp_catalog_ctrl *ctrl, break; } - mainlink_levels = dp_read(catalog->exe_mode, io_data, - DP_MAINLINK_LEVELS); + mainlink_levels = dp_read(DP_MAINLINK_LEVELS); mainlink_levels &= 0xFE0; mainlink_levels |= safe_to_exit_level; DP_DEBUG("mainlink_level = 0x%x, safe_to_exit_level = 0x%x\n", mainlink_levels, safe_to_exit_level); - dp_write(catalog->exe_mode, io_data, DP_MAINLINK_LEVELS, - mainlink_levels); + dp_write(DP_MAINLINK_LEVELS, mainlink_levels); } @@ -2243,28 +2211,24 @@ static int dp_catalog_panel_timing_cfg(struct dp_catalog_panel *panel) if (panel->stream_id == DP_STREAM_1) offset = DP1_TOTAL_HOR_VER - DP_TOTAL_HOR_VER; - dp_write(catalog->exe_mode, io_data, DP_TOTAL_HOR_VER + offset, - panel->total); - dp_write(catalog->exe_mode, io_data, - DP_START_HOR_VER_FROM_SYNC + offset, panel->sync_start); - dp_write(catalog->exe_mode, io_data, - DP_HSYNC_VSYNC_WIDTH_POLARITY + offset, panel->width_blanking); - dp_write(catalog->exe_mode, io_data, DP_ACTIVE_HOR_VER + offset, - panel->dp_active); + dp_write(DP_TOTAL_HOR_VER + offset, panel->total); + dp_write(DP_START_HOR_VER_FROM_SYNC + offset, panel->sync_start); + dp_write(DP_HSYNC_VSYNC_WIDTH_POLARITY + offset, panel->width_blanking); + dp_write(DP_ACTIVE_HOR_VER + offset, panel->dp_active); if (panel->stream_id == DP_STREAM_0) io_data = catalog->io.dp_p0; else io_data = catalog->io.dp_p1; - reg = dp_read(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG); + reg = dp_read(MMSS_DP_INTF_CONFIG); if (panel->widebus_en) reg |= BIT(4); else reg &= ~BIT(4); - dp_write(catalog->exe_mode, io_data, MMSS_DP_INTF_CONFIG, reg); + dp_write(MMSS_DP_INTF_CONFIG, reg); end: return 0; } @@ -2283,30 +2247,26 @@ static void dp_catalog_hpd_config_hpd(struct dp_catalog_hpd *hpd, bool en) io_data = catalog->io.dp_aux; if (en) { - u32 reftimer = dp_read(catalog->exe_mode, io_data, - DP_DP_HPD_REFTIMER); + u32 reftimer = dp_read(DP_DP_HPD_REFTIMER); /* Arm only the UNPLUG and HPD_IRQ interrupts */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_ACK, 0xF); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_MASK, 0xA); + dp_write(DP_DP_HPD_INT_ACK, 0xF); + dp_write(DP_DP_HPD_INT_MASK, 0xA); /* Enable REFTIMER to count 1ms */ reftimer |= BIT(16); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_REFTIMER, - reftimer); + dp_write(DP_DP_HPD_REFTIMER, reftimer); /* Connect_time is 250us & disconnect_time is 2ms */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_EVENT_TIME_0, - 0x3E800FA); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_EVENT_TIME_1, - 0x1F407D0); + dp_write(DP_DP_HPD_EVENT_TIME_0, 0x3E800FA); + dp_write(DP_DP_HPD_EVENT_TIME_1, 0x1F407D0); /* Enable HPD */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_CTRL, 0x1); + dp_write(DP_DP_HPD_CTRL, 0x1); } else { /* Disable HPD */ - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_CTRL, 0x0); + dp_write(DP_DP_HPD_CTRL, 0x0); } } @@ -2324,8 +2284,8 @@ static u32 dp_catalog_hpd_get_interrupt(struct dp_catalog_hpd *hpd) catalog = dp_catalog_get_priv(hpd); io_data = catalog->io.dp_aux; - isr = dp_read(catalog->exe_mode, io_data, DP_DP_HPD_INT_STATUS); - dp_write(catalog->exe_mode, io_data, DP_DP_HPD_INT_ACK, (isr & 0xf)); + isr = dp_read(DP_DP_HPD_INT_STATUS); + dp_write(DP_DP_HPD_INT_ACK, (isr & 0xf)); return isr; } @@ -2392,8 +2352,7 @@ static void dp_catalog_audio_config_sdp(struct dp_catalog_audio *audio) catalog = dp_catalog_get_priv(audio); io_data = catalog->io.dp_link; - sdp_cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); + sdp_cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); /* AUDIO_TIMESTAMP_SDP_EN */ sdp_cfg |= BIT(1); @@ -2407,19 +2366,16 @@ static void dp_catalog_audio_config_sdp(struct dp_catalog_audio *audio) sdp_cfg |= BIT(20); DP_DEBUG("sdp_cfg = 0x%x\n", sdp_cfg); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG + sdp_cfg_off, - sdp_cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, sdp_cfg); - sdp_cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg_off); + sdp_cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg_off); /* IFRM_REGSRC -> Do not use reg values */ sdp_cfg2 &= ~BIT(0); /* AUDIO_STREAM_HB3_REGSRC-> Do not use reg values */ sdp_cfg2 &= ~BIT(1); DP_DEBUG("sdp_cfg2 = 0x%x\n", sdp_cfg2); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG2 + sdp_cfg_off, - sdp_cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg_off, sdp_cfg2); } static void dp_catalog_audio_get_header(struct dp_catalog_audio *audio) @@ -2440,7 +2396,7 @@ static void dp_catalog_audio_get_header(struct dp_catalog_audio *audio) sdp = audio->sdp_type; header = audio->sdp_header; - audio->data = dp_read(catalog->exe_mode, io_data, sdp_map[sdp][header]); + audio->data = dp_read(sdp_map[sdp][header]); } static void dp_catalog_audio_set_header(struct dp_catalog_audio *audio) @@ -2463,7 +2419,7 @@ static void dp_catalog_audio_set_header(struct dp_catalog_audio *audio) header = audio->sdp_header; data = audio->data; - dp_write(catalog->exe_mode, io_data, sdp_map[sdp][header], data); + dp_write(sdp_map[sdp][header], data); } static void dp_catalog_audio_config_acr(struct dp_catalog_audio *audio) @@ -2481,7 +2437,7 @@ static void dp_catalog_audio_config_acr(struct dp_catalog_audio *audio) DP_DEBUG("select = 0x%x, acr_ctrl = 0x%x\n", select, acr_ctrl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_AUDIO_ACR_CTRL, acr_ctrl); + dp_write(MMSS_DP_AUDIO_ACR_CTRL, acr_ctrl); } static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) @@ -2496,7 +2452,7 @@ static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) io_data = catalog->io.dp_link; enable = !!audio->data; - audio_ctrl = dp_read(catalog->exe_mode, io_data, MMSS_DP_AUDIO_CFG); + audio_ctrl = dp_read(MMSS_DP_AUDIO_CFG); if (enable) audio_ctrl |= BIT(0); @@ -2504,7 +2460,7 @@ static void dp_catalog_audio_enable(struct dp_catalog_audio *audio) audio_ctrl &= ~BIT(0); DP_DEBUG("dp_audio_cfg = 0x%x\n", audio_ctrl); - dp_write(catalog->exe_mode, io_data, MMSS_DP_AUDIO_CFG, audio_ctrl); + dp_write(MMSS_DP_AUDIO_CFG, audio_ctrl); /* make sure audio engine is disabled */ wmb(); @@ -2527,8 +2483,7 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) offset = MMSS_DP1_GENERIC0_0 - MMSS_DP_GENERIC0_0; /* Config header and parity byte 1 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_0 + offset); + value = dp_read(MMSS_DP_GENERIC1_0 + offset); new_value = 0x83; parity_byte = dp_header_get_parity(new_value); @@ -2536,12 +2491,10 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_1_BIT)); DP_DEBUG("Header Byte 1: value = 0x%x, parity_byte = 0x%x\n", value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_0 + offset, - value); + dp_write(MMSS_DP_GENERIC1_0 + offset, value); /* Config header and parity byte 2 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_1 + offset); + value = dp_read(MMSS_DP_GENERIC1_1 + offset); new_value = 0x1b; parity_byte = dp_header_get_parity(new_value); @@ -2549,12 +2502,10 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_2_BIT)); DP_DEBUG("Header Byte 2: value = 0x%x, parity_byte = 0x%x\n", value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_1 + offset, - value); + dp_write(MMSS_DP_GENERIC1_1 + offset, value); /* Config header and parity byte 3 */ - value = dp_read(catalog->exe_mode, io_data, - MMSS_DP_GENERIC1_1 + offset); + value = dp_read(MMSS_DP_GENERIC1_1 + offset); new_value = (0x0 | (0x12 << 2)); parity_byte = dp_header_get_parity(new_value); @@ -2562,8 +2513,7 @@ static void dp_catalog_config_spd_header(struct dp_catalog_panel *panel) | (parity_byte << PARITY_BYTE_3_BIT)); DP_DEBUG("Header Byte 3: value = 0x%x, parity_byte = 0x%x\n", new_value, parity_byte); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_1 + offset, - value); + dp_write(MMSS_DP_GENERIC1_1 + offset, value); } static void dp_catalog_panel_config_spd(struct dp_catalog_panel *panel) @@ -2610,58 +2560,53 @@ static void dp_catalog_panel_config_spd(struct dp_catalog_panel *panel) vendor = panel->spd_vendor_name; product = panel->spd_product_description; - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_2 + offset, + dp_write(MMSS_DP_GENERIC1_2 + offset, ((vendor[0] & 0x7f) | ((vendor[1] & 0x7f) << 8) | ((vendor[2] & 0x7f) << 16) | ((vendor[3] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_3 + offset, + dp_write(MMSS_DP_GENERIC1_3 + offset, ((vendor[4] & 0x7f) | ((vendor[5] & 0x7f) << 8) | ((vendor[6] & 0x7f) << 16) | ((vendor[7] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_4 + offset, + dp_write(MMSS_DP_GENERIC1_4 + offset, ((product[0] & 0x7f) | ((product[1] & 0x7f) << 8) | ((product[2] & 0x7f) << 16) | ((product[3] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_5 + offset, + dp_write(MMSS_DP_GENERIC1_5 + offset, ((product[4] & 0x7f) | ((product[5] & 0x7f) << 8) | ((product[6] & 0x7f) << 16) | ((product[7] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_6 + offset, + dp_write(MMSS_DP_GENERIC1_6 + offset, ((product[8] & 0x7f) | ((product[9] & 0x7f) << 8) | ((product[10] & 0x7f) << 16) | ((product[11] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_7 + offset, + dp_write(MMSS_DP_GENERIC1_7 + offset, ((product[12] & 0x7f) | ((product[13] & 0x7f) << 8) | ((product[14] & 0x7f) << 16) | ((product[15] & 0x7f) << 24))); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_8 + offset, - device_type); - dp_write(catalog->exe_mode, io_data, MMSS_DP_GENERIC1_9 + offset, 0x00); + dp_write(MMSS_DP_GENERIC1_8 + offset, device_type); + dp_write(MMSS_DP_GENERIC1_9 + offset, 0x00); if (panel->stream_id == DP_STREAM_1) { sdp_cfg_off = MMSS_DP1_SDP_CFG - MMSS_DP_SDP_CFG; sdp_cfg2_off = MMSS_DP1_SDP_CFG2 - MMSS_DP_SDP_CFG2; } - spd_cfg = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG + sdp_cfg_off); + spd_cfg = dp_read(MMSS_DP_SDP_CFG + sdp_cfg_off); /* GENERIC1_SDP for SPD Infoframe */ spd_cfg |= BIT(18); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG + sdp_cfg_off, - spd_cfg); + dp_write(MMSS_DP_SDP_CFG + sdp_cfg_off, spd_cfg); - spd_cfg2 = dp_read(catalog->exe_mode, io_data, - MMSS_DP_SDP_CFG2 + sdp_cfg2_off); + spd_cfg2 = dp_read(MMSS_DP_SDP_CFG2 + sdp_cfg2_off); /* 28 data bytes for SPD Infoframe with GENERIC1 set */ spd_cfg2 |= BIT(17); - dp_write(catalog->exe_mode, io_data, MMSS_DP_SDP_CFG2 + sdp_cfg2_off, - spd_cfg2); + dp_write(MMSS_DP_SDP_CFG2 + sdp_cfg2_off, spd_cfg2); dp_catalog_panel_sdp_update(panel); } @@ -2723,24 +2668,50 @@ static void dp_catalog_set_exe_mode(struct dp_catalog *dp_catalog, char *mode) else dp_catalog_get_io_buf(catalog); - if (dp_catalog->priv.data && dp_catalog->priv.put) - dp_catalog->priv.set_exe_mode(dp_catalog, mode); + if (!strcmp(catalog->exe_mode, "hw") || + !strcmp(catalog->exe_mode, "all")) { + catalog->read = dp_read_hw; + catalog->write = dp_write_hw; + + dp_catalog->sub->read = dp_read_sub_hw; + dp_catalog->sub->write = dp_write_sub_hw; + } else { + catalog->read = dp_read_sw; + catalog->write = dp_write_sw; + + dp_catalog->sub->read = dp_read_sub_sw; + dp_catalog->sub->write = dp_write_sub_sw; + } } -static int dp_catalog_init(struct device *dev, struct dp_catalog *catalog, +static int dp_catalog_init(struct device *dev, struct dp_catalog *dp_catalog, struct dp_parser *parser) { int rc = 0; - struct dp_catalog_private *catalog_priv; + struct dp_catalog_private *catalog = container_of(dp_catalog, + struct dp_catalog_private, dp_catalog); - catalog_priv = container_of(catalog, struct dp_catalog_private, - dp_catalog); - - if (parser->hw_cfg.phy_version == DP_PHY_VERSION_4_2_0) - rc = dp_catalog_get_v420(dev, catalog, &catalog_priv->io); - else if (parser->hw_cfg.phy_version == DP_PHY_VERSION_2_0_0) - rc = dp_catalog_get_v200(dev, catalog, &catalog_priv->io); + switch (parser->hw_cfg.phy_version) { + case DP_PHY_VERSION_4_2_0: + dp_catalog->sub = dp_catalog_get_v420(dev, dp_catalog, + &catalog->io); + break; + case DP_PHY_VERSION_2_0_0: + dp_catalog->sub = dp_catalog_get_v200(dev, dp_catalog, + &catalog->io); + break; + default: + goto end; + } + if (IS_ERR(dp_catalog->sub)) { + rc = PTR_ERR(dp_catalog->sub); + dp_catalog->sub = NULL; + } else { + dp_catalog->sub->read = dp_read_sub_hw; + dp_catalog->sub->write = dp_write_sub_hw; + } +end: return rc; } @@ -2754,8 +2725,8 @@ void dp_catalog_put(struct dp_catalog *dp_catalog) catalog = container_of(dp_catalog, struct dp_catalog_private, dp_catalog); - if (dp_catalog->priv.data && dp_catalog->priv.put) - dp_catalog->priv.put(dp_catalog); + if (dp_catalog->sub && dp_catalog->sub->put) + dp_catalog->sub->put(dp_catalog); catalog->parser->clear_io_buf(catalog->parser); devm_kfree(catalog->dev, catalog); @@ -2851,6 +2822,9 @@ struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_parser *parser) catalog->dev = dev; catalog->parser = parser; + catalog->read = dp_read_hw; + catalog->write = dp_write_hw; + dp_catalog_get_io(catalog); strlcpy(catalog->exe_mode, "hw", sizeof(catalog->exe_mode)); diff --git a/msm/dp/dp_catalog.h b/msm/dp/dp_catalog.h index a1235b529463..0b1f00408e43 100644 --- a/msm/dp/dp_catalog.h +++ b/msm/dp/dp_catalog.h @@ -222,11 +222,29 @@ struct dp_catalog_panel { }; struct dp_catalog; -struct dp_catalog_priv { - void *data; +struct dp_catalog_sub { + u32 (*read)(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset); + void (*write)(struct dp_catalog *dp_catalog, + struct dp_io_data *io_data, u32 offset, u32 data); void (*put)(struct dp_catalog *catalog); - void (*set_exe_mode)(struct dp_catalog *dp_catalog, char *mode); +}; + +struct dp_catalog_io { + struct dp_io_data *dp_ahb; + struct dp_io_data *dp_aux; + struct dp_io_data *dp_link; + struct dp_io_data *dp_p0; + struct dp_io_data *dp_phy; + struct dp_io_data *dp_ln_tx0; + struct dp_io_data *dp_ln_tx1; + struct dp_io_data *dp_mmss_cc; + struct dp_io_data *dp_pll; + struct dp_io_data *usb3_dp_com; + struct dp_io_data *hdcp_physical; + struct dp_io_data *dp_p1; + struct dp_io_data *dp_tcsr; }; struct dp_catalog { @@ -234,9 +252,10 @@ struct dp_catalog { struct dp_catalog_ctrl ctrl; struct dp_catalog_audio audio; struct dp_catalog_panel panel; - struct dp_catalog_priv priv; struct dp_catalog_hpd hpd; + struct dp_catalog_sub *sub; + void (*set_exe_mode)(struct dp_catalog *dp_catalog, char *mode); int (*get_reg_dump)(struct dp_catalog *dp_catalog, char *mode, u8 **out_buf, u32 *out_buf_len); @@ -307,40 +326,13 @@ static inline u8 dp_header_get_parity(u32 data) return parity_byte; } -static inline u32 dp_read(char *exe_mode, struct dp_io_data *io_data, - u32 offset) -{ - u32 data = 0; - - if (!strcmp(exe_mode, "hw") || !strcmp(exe_mode, "all")) { - data = readl_relaxed(io_data->io.base + offset); - } else if (!strcmp(exe_mode, "sw")) { - if (io_data->buf) - memcpy(&data, io_data->buf + offset, sizeof(offset)); - } - - return data; -} - -static inline void dp_write(char *exe_mode, struct dp_io_data *io_data, - u32 offset, u32 data) -{ - if (!strcmp(exe_mode, "hw") || !strcmp(exe_mode, "all")) - writel_relaxed(data, io_data->io.base + offset); - - if (!strcmp(exe_mode, "sw") || !strcmp(exe_mode, "all")) { - if (io_data->buf) - memcpy(io_data->buf + offset, &data, sizeof(data)); - } -} - struct dp_catalog *dp_catalog_get(struct device *dev, struct dp_parser *parser); void dp_catalog_put(struct dp_catalog *catalog); -int dp_catalog_get_v420(struct device *dev, struct dp_catalog *catalog, - void *io); +struct dp_catalog_sub *dp_catalog_get_v420(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io); -int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, - void *io); +struct dp_catalog_sub *dp_catalog_get_v200(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io); #endif /* _DP_CATALOG_H_ */ diff --git a/msm/dp/dp_catalog_v200.c b/msm/dp/dp_catalog_v200.c index 74ef135c9ad7..97d78a120bc4 100644 --- a/msm/dp/dp_catalog_v200.c +++ b/msm/dp/dp_catalog_v200.c @@ -10,35 +10,28 @@ #include "dp_debug.h" #define dp_catalog_get_priv_v200(x) ({ \ - struct dp_catalog *dp_catalog; \ - dp_catalog = container_of(x, struct dp_catalog, x); \ - dp_catalog->priv.data; \ + struct dp_catalog *catalog; \ + catalog = container_of(x, struct dp_catalog, x); \ + container_of(catalog->sub, \ + struct dp_catalog_private_v200, sub); \ }) -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; - struct dp_io_data *dp_tcsr; -}; +#define dp_read(x) ({ \ + catalog->sub.read(catalog->dpc, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->sub.write(catalog->dpc, io_data, x, y); \ +}) struct dp_catalog_private_v200 { struct device *dev; struct dp_catalog_io *io; - - char exe_mode[SZ_4]; + struct dp_catalog *dpc; + struct dp_catalog_sub sub; }; -static void dp_catalog_aux_clear_hw_interrupts_v200(struct dp_catalog_aux *aux) +static void dp_catalog_aux_clear_hw_int_v200(struct dp_catalog_aux *aux) { struct dp_catalog_private_v200 *catalog; struct dp_io_data *io_data; @@ -52,17 +45,15 @@ static void dp_catalog_aux_clear_hw_interrupts_v200(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv_v200(aux); io_data = catalog->io->dp_phy; - data = dp_read(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_STATUS_V200); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS_V200); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0x9f); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_CLEAR_V200, - 0); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V200, 0); wmb(); /* make sure register is cleared */ } @@ -79,40 +70,38 @@ static void dp_catalog_aux_setup_v200(struct dp_catalog_aux *aux, } catalog = dp_catalog_get_priv_v200(aux); - io_data = catalog->io->dp_ahb; - sw_reset = dp_read(catalog->exe_mode, io_data, DP_SW_RESET); + + sw_reset = dp_read(DP_SW_RESET); sw_reset |= BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); usleep_range(1000, 1010); /* h/w recommended delay */ sw_reset &= ~BIT(0); - dp_write(catalog->exe_mode, io_data, DP_SW_RESET, sw_reset); + dp_write(DP_SW_RESET, sw_reset); - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x4); /* bit 2 */ + dp_write(DP_PHY_CTRL, 0x4); /* bit 2 */ udelay(1000); - dp_write(catalog->exe_mode, io_data, DP_PHY_CTRL, 0x0); /* bit 2 */ + dp_write(DP_PHY_CTRL, 0x0); /* bit 2 */ wmb(); /* make sure programming happened */ io_data = catalog->io->dp_tcsr; - dp_write(catalog->exe_mode, io_data, 0x4c, 0x1); /* bit 0 & 2 */ + dp_write(0x4c, 0x1); /* bit 0 & 2 */ wmb(); /* make sure programming happened */ io_data = catalog->io->dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x3c); + dp_write(DP_PHY_PD_CTL, 0x3c); wmb(); /* make sure PD programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x3d); + dp_write(DP_PHY_PD_CTL, 0x3d); wmb(); /* make sure PD programming happened */ /* DP AUX CFG register programming */ io_data = catalog->io->dp_phy; for (i = 0; i < PHY_AUX_CFG_MAX; i++) - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK_V200, - 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK_V200, 0x1F); wmb(); /* make sure AUX configuration is done before enabling it */ } @@ -146,10 +135,8 @@ static void dp_catalog_panel_config_msa_v200(struct dp_catalog_panel *panel, strm_reg_off = MMSS_DP_PIXEL1_M_V200 - MMSS_DP_PIXEL_M_V200; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M_V200 + strm_reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N_V200 + strm_reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M_V200 + strm_reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N_V200 + strm_reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -182,10 +169,8 @@ static void dp_catalog_panel_config_msa_v200(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_reg_off, - mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_reg_off, - nvid); + dp_write(DP_SOFTWARE_MVID + mvid_reg_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_reg_off, nvid); } static void dp_catalog_ctrl_lane_mapping_v200(struct dp_catalog_ctrl *ctrl, @@ -234,8 +219,7 @@ static void dp_catalog_ctrl_lane_mapping_v200(struct dp_catalog_ctrl *ctrl, lane_map_reg = ((l_map[3]&3)<<6)|((l_map[2]&3)<<4)|((l_map[1]&3)<<2) |(l_map[0]&3); - dp_write(catalog->exe_mode, io_data, DP_LOGICAL2PHYSICAL_LANE_MAPPING, - lane_map_reg); + dp_write(DP_LOGICAL2PHYSICAL_LANE_MAPPING, lane_map_reg); } static void dp_catalog_ctrl_usb_reset_v200(struct dp_catalog_ctrl *ctrl, @@ -247,48 +231,36 @@ static void dp_catalog_put_v200(struct dp_catalog *catalog) { struct dp_catalog_private_v200 *catalog_priv; - if (!catalog || !catalog->priv.data) + if (!catalog) return; - catalog_priv = catalog->priv.data; + catalog_priv = container_of(catalog->sub, + struct dp_catalog_private_v200, sub); + devm_kfree(catalog_priv->dev, catalog_priv); } -static void dp_catalog_set_exe_mode_v200(struct dp_catalog *catalog, char *mode) -{ - struct dp_catalog_private_v200 *catalog_priv; - - if (!catalog || !catalog->priv.data) - return; - - catalog_priv = catalog->priv.data; - - strlcpy(catalog_priv->exe_mode, mode, sizeof(catalog_priv->exe_mode)); -} - -int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, - void *io) +struct dp_catalog_sub *dp_catalog_get_v200(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io) { struct dp_catalog_private_v200 *catalog_priv; if (!dev || !catalog) { DP_ERR("invalid input\n"); - return -EINVAL; + return ERR_PTR(-EINVAL); } catalog_priv = devm_kzalloc(dev, sizeof(*catalog_priv), GFP_KERNEL); if (!catalog_priv) - return -ENOMEM; + return ERR_PTR(-ENOMEM); catalog_priv->dev = dev; catalog_priv->io = io; - catalog->priv.data = catalog_priv; + catalog_priv->dpc = catalog; - catalog->priv.put = dp_catalog_put_v200; - catalog->priv.set_exe_mode = dp_catalog_set_exe_mode_v200; + catalog_priv->sub.put = dp_catalog_put_v200; - catalog->aux.clear_hw_interrupts = - dp_catalog_aux_clear_hw_interrupts_v200; + catalog->aux.clear_hw_interrupts = dp_catalog_aux_clear_hw_int_v200; catalog->aux.setup = dp_catalog_aux_setup_v200; catalog->panel.config_msa = dp_catalog_panel_config_msa_v200; @@ -296,8 +268,5 @@ int dp_catalog_get_v200(struct device *dev, struct dp_catalog *catalog, catalog->ctrl.lane_mapping = dp_catalog_ctrl_lane_mapping_v200; catalog->ctrl.usb_reset = dp_catalog_ctrl_usb_reset_v200; - /* Set the default execution mode to hardware mode */ - dp_catalog_set_exe_mode_v200(catalog, "hw"); - - return 0; + return &catalog_priv->sub; } diff --git a/msm/dp/dp_catalog_v420.c b/msm/dp/dp_catalog_v420.c index 266f0f5c5916..ea4325726479 100644 --- a/msm/dp/dp_catalog_v420.c +++ b/msm/dp/dp_catalog_v420.c @@ -9,9 +9,18 @@ #include "dp_debug.h" #define dp_catalog_get_priv_v420(x) ({ \ - struct dp_catalog *dp_catalog; \ - dp_catalog = container_of(x, struct dp_catalog, x); \ - dp_catalog->priv.data; \ + struct dp_catalog *catalog; \ + catalog = container_of(x, struct dp_catalog, x); \ + container_of(catalog->sub, \ + struct dp_catalog_private_v420, sub); \ +}) + +#define dp_read(x) ({ \ + catalog->sub.read(catalog->dpc, io_data, x); \ +}) + +#define dp_write(x, y) ({ \ + catalog->sub.write(catalog->dpc, io_data, x, y); \ }) #define MAX_VOLTAGE_LEVELS 4 @@ -60,26 +69,11 @@ static u8 const dp_swing_hbr_rbr[MAX_VOLTAGE_LEVELS][MAX_PRE_EMP_LEVELS] = { {0x1F, 0xFF, 0xFF, 0xFF} /* sw1, 1.2v */ }; -struct dp_catalog_io { - struct dp_io_data *dp_ahb; - struct dp_io_data *dp_aux; - struct dp_io_data *dp_link; - struct dp_io_data *dp_p0; - struct dp_io_data *dp_phy; - struct dp_io_data *dp_ln_tx0; - struct dp_io_data *dp_ln_tx1; - struct dp_io_data *dp_mmss_cc; - struct dp_io_data *dp_pll; - struct dp_io_data *usb3_dp_com; - struct dp_io_data *hdcp_physical; - struct dp_io_data *dp_p1; -}; - struct dp_catalog_private_v420 { struct device *dev; + struct dp_catalog_sub sub; struct dp_catalog_io *io; - - char exe_mode[SZ_4]; + struct dp_catalog *dpc; }; static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, @@ -97,13 +91,12 @@ static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, catalog = dp_catalog_get_priv_v420(aux); io_data = catalog->io->dp_phy; - dp_write(catalog->exe_mode, io_data, DP_PHY_PD_CTL, 0x67); + dp_write(DP_PHY_PD_CTL, 0x67); wmb(); /* make sure PD programming happened */ /* Turn on BIAS current for PHY/PLL */ io_data = catalog->io->dp_pll; - dp_write(catalog->exe_mode, io_data, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, - 0x17); + dp_write(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x17); wmb(); /* make sure BIAS programming happened */ io_data = catalog->io->dp_phy; @@ -112,16 +105,14 @@ static void dp_catalog_aux_setup_v420(struct dp_catalog_aux *aux, DP_DEBUG("%s: offset=0x%08x, value=0x%08x\n", dp_phy_aux_config_type_to_string(i), cfg[i].offset, cfg[i].lut[cfg[i].current_index]); - dp_write(catalog->exe_mode, io_data, cfg[i].offset, - cfg[i].lut[cfg[i].current_index]); + dp_write(cfg[i].offset, cfg[i].lut[cfg[i].current_index]); } wmb(); /* make sure DP AUX CFG programming happened */ - dp_write(catalog->exe_mode, io_data, DP_PHY_AUX_INTERRUPT_MASK_V420, - 0x1F); + dp_write(DP_PHY_AUX_INTERRUPT_MASK_V420, 0x1F); } -static void dp_catalog_aux_clear_hw_interrupts_v420(struct dp_catalog_aux *aux) +static void dp_catalog_aux_clear_hw_int_v420(struct dp_catalog_aux *aux) { struct dp_catalog_private_v420 *catalog; struct dp_io_data *io_data; @@ -135,17 +126,15 @@ static void dp_catalog_aux_clear_hw_interrupts_v420(struct dp_catalog_aux *aux) catalog = dp_catalog_get_priv_v420(aux); io_data = catalog->io->dp_phy; - data = dp_read(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_STATUS_V420); + data = dp_read(DP_PHY_AUX_INTERRUPT_STATUS_V420); - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x1f); + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x1f); wmb(); /* make sure 0x1f is written before next write */ - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x9f); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0x9f); wmb(); /* make sure 0x9f is written before next write */ - dp_write(catalog->exe_mode, io_data, - DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0); + + dp_write(DP_PHY_AUX_INTERRUPT_CLEAR_V420, 0); wmb(); /* make sure register is cleared */ } @@ -176,10 +165,8 @@ static void dp_catalog_panel_config_msa_v420(struct dp_catalog_panel *panel, if (panel->stream_id == DP_STREAM_1) reg_off = MMSS_DP_PIXEL1_M_V420 - MMSS_DP_PIXEL_M_V420; - pixel_m = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_M_V420 + reg_off); - pixel_n = dp_read(catalog->exe_mode, io_data, - MMSS_DP_PIXEL_N_V420 + reg_off); + pixel_m = dp_read(MMSS_DP_PIXEL_M_V420 + reg_off); + pixel_n = dp_read(MMSS_DP_PIXEL_N_V420 + reg_off); DP_DEBUG("pixel_m=0x%x, pixel_n=0x%x\n", pixel_m, pixel_n); mvid = (pixel_m & 0xFFFF) * 5; @@ -212,8 +199,8 @@ static void dp_catalog_panel_config_msa_v420(struct dp_catalog_panel *panel, } DP_DEBUG("mvid=0x%x, nvid=0x%x\n", mvid, nvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_MVID + mvid_off, mvid); - dp_write(catalog->exe_mode, io_data, DP_SOFTWARE_NVID + nvid_off, nvid); + dp_write(DP_SOFTWARE_MVID + mvid_off, mvid); + dp_write(DP_SOFTWARE_NVID + nvid_off, nvid); } static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, @@ -221,8 +208,8 @@ static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, { u32 info = 0x0; struct dp_catalog_private_v420 *catalog; - u8 orientation = BIT(!!flipped); struct dp_io_data *io_data; + u8 orientation = BIT(!!flipped); if (!ctrl) { DP_ERR("invalid input\n"); @@ -236,7 +223,7 @@ static void dp_catalog_ctrl_phy_lane_cfg_v420(struct dp_catalog_ctrl *ctrl, info |= ((orientation & 0x0F) << 4); DP_DEBUG("Shared Info = 0x%x\n", info); - dp_write(catalog->exe_mode, io_data, DP_PHY_SPARE0_V420, info); + dp_write(DP_PHY_SPARE0_V420, info); } static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, @@ -258,7 +245,7 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, catalog = dp_catalog_get_priv_v420(ctrl); io_data = catalog->io->dp_ahb; - version = dp_read(catalog->exe_mode, io_data, DP_HW_VERSION); + version = dp_read(DP_HW_VERSION); if (version == 0x10020003) { if (high) { @@ -275,12 +262,12 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, /* program default setting first */ io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL_V420, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, 0x2A); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, 0x20); + dp_write(TXn_TX_DRV_LVL_V420, 0x2A); + dp_write(TXn_TX_EMP_POST1_LVL, 0x20); /* Enable MUX to use Cursor values from these registers */ value0 |= BIT(5); @@ -289,16 +276,12 @@ static void dp_catalog_ctrl_update_vx_px_v420(struct dp_catalog_ctrl *ctrl, /* Configure host and panel only if both values are allowed */ if (value0 != 0xFF && value1 != 0xFF) { io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, - value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL_V420, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_DRV_LVL_V420, - value0); - dp_write(catalog->exe_mode, io_data, TXn_TX_EMP_POST1_LVL, - value1); + dp_write(TXn_TX_DRV_LVL_V420, value0); + dp_write(TXn_TX_EMP_POST1_LVL, value1); DP_DEBUG("hw: vx_value=0x%x px_value=0x%x\n", value0, value1); @@ -326,66 +309,50 @@ static void dp_catalog_ctrl_lane_pnswap_v420(struct dp_catalog_ctrl *ctrl, cfg1 |= ((ln_pnswap >> 3) & 0x1) << 2; io_data = catalog->io->dp_ln_tx0; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, cfg0); + dp_write(TXn_TX_POL_INV_V420, cfg0); io_data = catalog->io->dp_ln_tx1; - dp_write(catalog->exe_mode, io_data, TXn_TX_POL_INV_V420, cfg1); + dp_write(TXn_TX_POL_INV_V420, cfg1); } static void dp_catalog_put_v420(struct dp_catalog *catalog) { struct dp_catalog_private_v420 *catalog_priv; - if (!catalog || !catalog->priv.data) + if (!catalog) return; - catalog_priv = catalog->priv.data; + catalog_priv = container_of(catalog->sub, + struct dp_catalog_private_v420, sub); devm_kfree(catalog_priv->dev, catalog_priv); } -static void dp_catalog_set_exe_mode_v420(struct dp_catalog *catalog, char *mode) -{ - struct dp_catalog_private_v420 *catalog_priv; - - if (!catalog || !catalog->priv.data) - return; - - catalog_priv = catalog->priv.data; - - strlcpy(catalog_priv->exe_mode, mode, sizeof(catalog_priv->exe_mode)); -} - -int dp_catalog_get_v420(struct device *dev, struct dp_catalog *catalog, - void *io) +struct dp_catalog_sub *dp_catalog_get_v420(struct device *dev, + struct dp_catalog *catalog, struct dp_catalog_io *io) { struct dp_catalog_private_v420 *catalog_priv; if (!dev || !catalog) { DP_ERR("invalid input\n"); - return -EINVAL; + return ERR_PTR(-EINVAL); } catalog_priv = devm_kzalloc(dev, sizeof(*catalog_priv), GFP_KERNEL); if (!catalog_priv) - return -ENOMEM; + return ERR_PTR(-ENOMEM); catalog_priv->dev = dev; catalog_priv->io = io; - catalog->priv.data = catalog_priv; + catalog_priv->dpc = catalog; - catalog->priv.put = dp_catalog_put_v420; - catalog->priv.set_exe_mode = dp_catalog_set_exe_mode_v420; + catalog_priv->sub.put = dp_catalog_put_v420; catalog->aux.setup = dp_catalog_aux_setup_v420; - catalog->aux.clear_hw_interrupts = - dp_catalog_aux_clear_hw_interrupts_v420; + catalog->aux.clear_hw_interrupts = dp_catalog_aux_clear_hw_int_v420; catalog->panel.config_msa = dp_catalog_panel_config_msa_v420; catalog->ctrl.phy_lane_cfg = dp_catalog_ctrl_phy_lane_cfg_v420; catalog->ctrl.update_vx_px = dp_catalog_ctrl_update_vx_px_v420; catalog->ctrl.lane_pnswap = dp_catalog_ctrl_lane_pnswap_v420; - /* Set the default execution mode to hardware mode */ - dp_catalog_set_exe_mode_v420(catalog, "hw"); - - return 0; + return &catalog_priv->sub; }