Loading msm/dp/dp_drm.c +7 −6 Original line number Diff line number Diff line Loading @@ -357,7 +357,7 @@ int dp_connector_post_init(struct drm_connector *connector, void *display) int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { const u32 dual_lm = 2; const u32 single_lm = 1; Loading @@ -369,8 +369,8 @@ int dp_connector_get_mode_info(struct drm_connector *connector, struct dp_display_mode dp_mode; struct dp_display *dp_disp = display; if (!drm_mode || !mode_info || !max_mixer_width || !connector || !display) { if (!drm_mode || !mode_info || !avail_res || !avail_res->max_mixer_width || !connector || !display) { pr_err("invalid params\n"); return -EINVAL; } Loading @@ -381,7 +381,7 @@ int dp_connector_get_mode_info(struct drm_connector *connector, dp_panel = sde_conn->drv_panel; topology = &mode_info->topology; topology->num_lm = (max_mixer_width <= drm_mode->hdisplay) ? topology->num_lm = (avail_res->max_mixer_width <= drm_mode->hdisplay) ? dual_lm : single_lm; topology->num_enc = no_enc; topology->num_intf = single_intf; Loading Loading @@ -472,7 +472,7 @@ void dp_connector_post_open(struct drm_connector *connector, void *display) } int dp_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { int rc = 0; struct dp_display *dp; Loading Loading @@ -580,7 +580,8 @@ void dp_drm_bridge_deinit(void *data) } enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display) struct drm_display_mode *mode, void *display, const struct msm_resource_caps_info *avail_res) { struct dp_display *dp_disp; struct sde_connector *sde_conn; Loading msm/dp/dp_drm.h +9 −7 Original line number Diff line number Diff line Loading @@ -60,35 +60,37 @@ enum drm_connector_status dp_connector_detect(struct drm_connector *conn, * dp_connector_get_modes - callback to add drm modes via drm_mode_probed_add() * @connector: Pointer to drm connector structure * @display: Pointer to private display handle * @avail_res: Pointer with curr available resources * Returns: Number of modes added */ int dp_connector_get_modes(struct drm_connector *connector, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_mode_valid - callback to determine if specified mode is valid * @connector: Pointer to drm connector structure * @mode: Pointer to drm mode structure * @display: Pointer to private display handle * @avail_res: Pointer with curr available resources * Returns: Validity status for specified mode */ enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_get_mode_info - retrieve information of the mode selected * @connector: Pointer to drm connector structure * @drm_mode: Display mode set for the display * @mode_info: Out parameter. Information of the mode * @max_mixer_width: max width supported by HW layer mixer * @display: Pointer to private display structure * @avail_res: Pointer with curr available resources * Returns: zero on success */ int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_get_info - retrieve connector display info Loading Loading @@ -177,7 +179,7 @@ static inline enum drm_connector_status dp_connector_detect( static inline int dp_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return 0; } Loading @@ -185,7 +187,7 @@ static inline int dp_connector_get_modes(struct drm_connector *connector, static inline enum drm_mode_status dp_connector_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return MODE_OK; } Loading @@ -193,7 +195,7 @@ static inline enum drm_mode_status dp_connector_mode_valid( static inline int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return 0; } Loading msm/dp/dp_mst_drm.c +6 −5 Original line number Diff line number Diff line Loading @@ -1197,7 +1197,7 @@ dp_mst_connector_detect(struct drm_connector *connector, bool force, } static int dp_mst_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct sde_connector *c_conn = to_sde_connector(connector); struct dp_display *dp_display = display; Loading @@ -1224,7 +1224,7 @@ static int dp_mst_connector_get_modes(struct drm_connector *connector, enum drm_mode_status dp_mst_connector_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dp_display *dp_display = display; struct dp_mst_private *mst; Loading Loading @@ -1275,7 +1275,7 @@ enum drm_mode_status dp_mst_connector_mode_valid( return MODE_BAD; } return dp_connector_mode_valid(connector, mode, display); return dp_connector_mode_valid(connector, mode, display, avail_res); } int dp_mst_connector_get_info(struct drm_connector *connector, Loading Loading @@ -1309,14 +1309,15 @@ int dp_mst_connector_get_info(struct drm_connector *connector, int dp_mst_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { int rc; DP_MST_DEBUG("enter:\n"); rc = dp_connector_get_mode_info(connector, drm_mode, mode_info, max_mixer_width, display); display, avail_res); DP_MST_DEBUG("mst connector:%d get mode info. rc:%d\n", connector->base.id, rc); Loading msm/dsi/dsi_display.c +10 −7 Original line number Diff line number Diff line Loading @@ -5134,7 +5134,8 @@ static enum drm_connector_status dsi_display_drm_ext_detect( } static int dsi_display_drm_ext_get_modes( struct drm_connector *connector, void *disp) struct drm_connector *connector, void *disp, const struct msm_resource_caps_info *avail_res) { struct dsi_display *display = disp; struct drm_display_mode *pmode, *pt; Loading @@ -5142,7 +5143,7 @@ static int dsi_display_drm_ext_get_modes( /* if there are modes defined in panel, ignore external modes */ if (display->panel->num_timing_nodes) return dsi_connector_get_modes(connector, disp); return dsi_connector_get_modes(connector, disp, avail_res); count = display->ext_conn->helper_private->get_modes( display->ext_conn); Loading @@ -5160,13 +5161,13 @@ static int dsi_display_drm_ext_get_modes( static enum drm_mode_status dsi_display_drm_ext_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *disp) void *disp, const struct msm_resource_caps_info *avail_res) { struct dsi_display *display = disp; enum drm_mode_status status; /* always do internal mode_valid check */ status = dsi_conn_mode_valid(connector, mode, disp); status = dsi_conn_mode_valid(connector, mode, disp, avail_res); if (status != MODE_OK) return status; Loading Loading @@ -5228,11 +5229,12 @@ static int dsi_display_ext_get_info(struct drm_connector *connector, static int dsi_display_ext_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct msm_display_topology *topology; if (!drm_mode || !mode_info) if (!drm_mode || !mode_info || !avail_res || !avail_res->max_mixer_width) return -EINVAL; memset(mode_info, 0, sizeof(*mode_info)); Loading @@ -5240,7 +5242,8 @@ static int dsi_display_ext_get_mode_info(struct drm_connector *connector, mode_info->vtotal = drm_mode->vtotal; topology = &mode_info->topology; topology->num_lm = (max_mixer_width <= drm_mode->hdisplay) ? 2 : 1; topology->num_lm = (avail_res->max_mixer_width <= drm_mode->hdisplay) ? 2 : 1; topology->num_enc = 0; topology->num_intf = topology->num_lm; Loading msm/dsi/dsi_drm.c +4 −3 Original line number Diff line number Diff line Loading @@ -459,7 +459,7 @@ u64 dsi_drm_find_bit_clk_rate(void *display, int dsi_conn_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dsi_display_mode dsi_mode; struct dsi_mode_info *timing; Loading Loading @@ -790,7 +790,8 @@ static void dsi_drm_update_checksum(struct edid *edid) edid->checksum = 0x100 - (sum & 0xFF); } int dsi_connector_get_modes(struct drm_connector *connector, void *data) int dsi_connector_get_modes(struct drm_connector *connector, void *data, const struct msm_resource_caps_info *avail_res) { int rc, i; u32 count = 0, edid_size; Loading Loading @@ -871,7 +872,7 @@ int dsi_connector_get_modes(struct drm_connector *connector, void *data) enum drm_mode_status dsi_conn_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dsi_display_mode dsi_mode; int rc; Loading Loading
msm/dp/dp_drm.c +7 −6 Original line number Diff line number Diff line Loading @@ -357,7 +357,7 @@ int dp_connector_post_init(struct drm_connector *connector, void *display) int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { const u32 dual_lm = 2; const u32 single_lm = 1; Loading @@ -369,8 +369,8 @@ int dp_connector_get_mode_info(struct drm_connector *connector, struct dp_display_mode dp_mode; struct dp_display *dp_disp = display; if (!drm_mode || !mode_info || !max_mixer_width || !connector || !display) { if (!drm_mode || !mode_info || !avail_res || !avail_res->max_mixer_width || !connector || !display) { pr_err("invalid params\n"); return -EINVAL; } Loading @@ -381,7 +381,7 @@ int dp_connector_get_mode_info(struct drm_connector *connector, dp_panel = sde_conn->drv_panel; topology = &mode_info->topology; topology->num_lm = (max_mixer_width <= drm_mode->hdisplay) ? topology->num_lm = (avail_res->max_mixer_width <= drm_mode->hdisplay) ? dual_lm : single_lm; topology->num_enc = no_enc; topology->num_intf = single_intf; Loading Loading @@ -472,7 +472,7 @@ void dp_connector_post_open(struct drm_connector *connector, void *display) } int dp_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { int rc = 0; struct dp_display *dp; Loading Loading @@ -580,7 +580,8 @@ void dp_drm_bridge_deinit(void *data) } enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display) struct drm_display_mode *mode, void *display, const struct msm_resource_caps_info *avail_res) { struct dp_display *dp_disp; struct sde_connector *sde_conn; Loading
msm/dp/dp_drm.h +9 −7 Original line number Diff line number Diff line Loading @@ -60,35 +60,37 @@ enum drm_connector_status dp_connector_detect(struct drm_connector *conn, * dp_connector_get_modes - callback to add drm modes via drm_mode_probed_add() * @connector: Pointer to drm connector structure * @display: Pointer to private display handle * @avail_res: Pointer with curr available resources * Returns: Number of modes added */ int dp_connector_get_modes(struct drm_connector *connector, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_mode_valid - callback to determine if specified mode is valid * @connector: Pointer to drm connector structure * @mode: Pointer to drm mode structure * @display: Pointer to private display handle * @avail_res: Pointer with curr available resources * Returns: Validity status for specified mode */ enum drm_mode_status dp_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_get_mode_info - retrieve information of the mode selected * @connector: Pointer to drm connector structure * @drm_mode: Display mode set for the display * @mode_info: Out parameter. Information of the mode * @max_mixer_width: max width supported by HW layer mixer * @display: Pointer to private display structure * @avail_res: Pointer with curr available resources * Returns: zero on success */ int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display); void *display, const struct msm_resource_caps_info *avail_res); /** * dp_connector_get_info - retrieve connector display info Loading Loading @@ -177,7 +179,7 @@ static inline enum drm_connector_status dp_connector_detect( static inline int dp_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return 0; } Loading @@ -185,7 +187,7 @@ static inline int dp_connector_get_modes(struct drm_connector *connector, static inline enum drm_mode_status dp_connector_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return MODE_OK; } Loading @@ -193,7 +195,7 @@ static inline enum drm_mode_status dp_connector_mode_valid( static inline int dp_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { return 0; } Loading
msm/dp/dp_mst_drm.c +6 −5 Original line number Diff line number Diff line Loading @@ -1197,7 +1197,7 @@ dp_mst_connector_detect(struct drm_connector *connector, bool force, } static int dp_mst_connector_get_modes(struct drm_connector *connector, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct sde_connector *c_conn = to_sde_connector(connector); struct dp_display *dp_display = display; Loading @@ -1224,7 +1224,7 @@ static int dp_mst_connector_get_modes(struct drm_connector *connector, enum drm_mode_status dp_mst_connector_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dp_display *dp_display = display; struct dp_mst_private *mst; Loading Loading @@ -1275,7 +1275,7 @@ enum drm_mode_status dp_mst_connector_mode_valid( return MODE_BAD; } return dp_connector_mode_valid(connector, mode, display); return dp_connector_mode_valid(connector, mode, display, avail_res); } int dp_mst_connector_get_info(struct drm_connector *connector, Loading Loading @@ -1309,14 +1309,15 @@ int dp_mst_connector_get_info(struct drm_connector *connector, int dp_mst_connector_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { int rc; DP_MST_DEBUG("enter:\n"); rc = dp_connector_get_mode_info(connector, drm_mode, mode_info, max_mixer_width, display); display, avail_res); DP_MST_DEBUG("mst connector:%d get mode info. rc:%d\n", connector->base.id, rc); Loading
msm/dsi/dsi_display.c +10 −7 Original line number Diff line number Diff line Loading @@ -5134,7 +5134,8 @@ static enum drm_connector_status dsi_display_drm_ext_detect( } static int dsi_display_drm_ext_get_modes( struct drm_connector *connector, void *disp) struct drm_connector *connector, void *disp, const struct msm_resource_caps_info *avail_res) { struct dsi_display *display = disp; struct drm_display_mode *pmode, *pt; Loading @@ -5142,7 +5143,7 @@ static int dsi_display_drm_ext_get_modes( /* if there are modes defined in panel, ignore external modes */ if (display->panel->num_timing_nodes) return dsi_connector_get_modes(connector, disp); return dsi_connector_get_modes(connector, disp, avail_res); count = display->ext_conn->helper_private->get_modes( display->ext_conn); Loading @@ -5160,13 +5161,13 @@ static int dsi_display_drm_ext_get_modes( static enum drm_mode_status dsi_display_drm_ext_mode_valid( struct drm_connector *connector, struct drm_display_mode *mode, void *disp) void *disp, const struct msm_resource_caps_info *avail_res) { struct dsi_display *display = disp; enum drm_mode_status status; /* always do internal mode_valid check */ status = dsi_conn_mode_valid(connector, mode, disp); status = dsi_conn_mode_valid(connector, mode, disp, avail_res); if (status != MODE_OK) return status; Loading Loading @@ -5228,11 +5229,12 @@ static int dsi_display_ext_get_info(struct drm_connector *connector, static int dsi_display_ext_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct msm_display_topology *topology; if (!drm_mode || !mode_info) if (!drm_mode || !mode_info || !avail_res || !avail_res->max_mixer_width) return -EINVAL; memset(mode_info, 0, sizeof(*mode_info)); Loading @@ -5240,7 +5242,8 @@ static int dsi_display_ext_get_mode_info(struct drm_connector *connector, mode_info->vtotal = drm_mode->vtotal; topology = &mode_info->topology; topology->num_lm = (max_mixer_width <= drm_mode->hdisplay) ? 2 : 1; topology->num_lm = (avail_res->max_mixer_width <= drm_mode->hdisplay) ? 2 : 1; topology->num_enc = 0; topology->num_intf = topology->num_lm; Loading
msm/dsi/dsi_drm.c +4 −3 Original line number Diff line number Diff line Loading @@ -459,7 +459,7 @@ u64 dsi_drm_find_bit_clk_rate(void *display, int dsi_conn_get_mode_info(struct drm_connector *connector, const struct drm_display_mode *drm_mode, struct msm_mode_info *mode_info, u32 max_mixer_width, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dsi_display_mode dsi_mode; struct dsi_mode_info *timing; Loading Loading @@ -790,7 +790,8 @@ static void dsi_drm_update_checksum(struct edid *edid) edid->checksum = 0x100 - (sum & 0xFF); } int dsi_connector_get_modes(struct drm_connector *connector, void *data) int dsi_connector_get_modes(struct drm_connector *connector, void *data, const struct msm_resource_caps_info *avail_res) { int rc, i; u32 count = 0, edid_size; Loading Loading @@ -871,7 +872,7 @@ int dsi_connector_get_modes(struct drm_connector *connector, void *data) enum drm_mode_status dsi_conn_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode, void *display) void *display, const struct msm_resource_caps_info *avail_res) { struct dsi_display_mode dsi_mode; int rc; Loading