Update source to Armbian-dev-202610.A311Y3
This commit is contained in:
@@ -243,16 +243,26 @@ static void meson_panel_encoder_atomic_enable(struct drm_encoder *encoder,
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
int lcd_frac_hint;
|
||||
struct am_meson_crtc_state *meson_crtc_state =
|
||||
to_am_meson_crtc_state(encoder->crtc->state);
|
||||
struct am_meson_crtc *amcrtc = to_am_meson_crtc(encoder->crtc);
|
||||
struct drm_display_mode *mode = &meson_crtc_state->base.adjusted_mode;
|
||||
struct am_meson_crtc_state *meson_crtc_state;
|
||||
struct am_meson_crtc *amcrtc;
|
||||
struct drm_display_mode *mode;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
struct am_meson_crtc_state *meson_old_crtc_state;
|
||||
enum vmode_e vmode = meson_crtc_state->vmode;
|
||||
unsigned int vrefresh = drm_mode_vrefresh(mode);
|
||||
struct meson_panel *panel = encoder_to_meson_panel(encoder);
|
||||
struct meson_panel_dev *panel_dev = panel->panel_dev;
|
||||
enum vmode_e vmode;
|
||||
unsigned int vrefresh;
|
||||
struct meson_panel *panel;
|
||||
struct meson_panel_dev *panel_dev;
|
||||
|
||||
if (!encoder || !encoder->crtc || !encoder->crtc->state)
|
||||
return;
|
||||
|
||||
meson_crtc_state = to_am_meson_crtc_state(encoder->crtc->state);
|
||||
amcrtc = to_am_meson_crtc(encoder->crtc);
|
||||
mode = &meson_crtc_state->base.adjusted_mode;
|
||||
vmode = meson_crtc_state->vmode;
|
||||
vrefresh = drm_mode_vrefresh(mode);
|
||||
panel = encoder_to_meson_panel(encoder);
|
||||
panel_dev = panel->panel_dev;
|
||||
|
||||
crtc = encoder->crtc;
|
||||
|
||||
@@ -336,7 +346,7 @@ static void meson_panel_cal_brr(struct meson_panel *am_lcd,
|
||||
struct drm_display_mode *adj_mode)
|
||||
{
|
||||
int i;
|
||||
struct drm_vrr_mode_group *group;
|
||||
struct drm_vrr_mode_group *group = NULL;
|
||||
|
||||
for (i = 0; i < am_lcd->num_vrr_group; i++) {
|
||||
group = &am_lcd->groups[i];
|
||||
@@ -353,7 +363,7 @@ static void meson_panel_cal_brr(struct meson_panel *am_lcd,
|
||||
}
|
||||
|
||||
DRM_DEBUG_KMS("%d, %d\n", i, am_lcd->num_vrr_group);
|
||||
if (i != am_lcd->num_vrr_group) {
|
||||
if (group && i != am_lcd->num_vrr_group) {
|
||||
strncpy(crtc_state->brr_mode, group->modename, DRM_DISPLAY_MODE_LEN);
|
||||
crtc_state->brr_mode[DRM_DISPLAY_MODE_LEN - 1] = '\0';
|
||||
/*group->brr only used by lcd, not div 100*/
|
||||
@@ -380,8 +390,8 @@ int meson_encoder_vrr_change(struct drm_encoder *encoder,
|
||||
return 0;
|
||||
|
||||
conn_state = drm_atomic_get_new_connector_state(state, connector);
|
||||
if (!conn_state)
|
||||
return 0;
|
||||
if (!conn_state || !conn_state->crtc)
|
||||
return -EINVAL;
|
||||
|
||||
crtc = conn_state->crtc;
|
||||
new_state = drm_atomic_get_new_crtc_state(state, crtc);
|
||||
@@ -423,6 +433,9 @@ static int meson_panel_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
if (crtc_state->vrr_enabled || meson_crtc_state->uboot_mode_init)
|
||||
meson_panel_cal_brr(am_lcd, meson_crtc_state, adj_mode);
|
||||
|
||||
if (!conn_state || !conn_state->state)
|
||||
return -EINVAL;
|
||||
|
||||
meson_encoder_vrr_change(encoder, conn_state->state);
|
||||
|
||||
/*drm not find connector by vout_validate_vmode*/
|
||||
@@ -466,12 +479,18 @@ int meson_panel_dev_bind(struct drm_device *drm,
|
||||
struct drm_encoder *encoder = NULL;
|
||||
struct meson_panel *panel_instance = NULL;
|
||||
struct drm_property *type_prop = NULL;
|
||||
struct meson_drm *priv = drm->dev_private;
|
||||
struct meson_drm *priv;
|
||||
char *connector_name = NULL;
|
||||
int connector_type = type;
|
||||
int connector_type;
|
||||
int encoder_type = DRM_MODE_ENCODER_LVDS;
|
||||
int ret = 0;
|
||||
|
||||
if (!drm || !drm->dev_private)
|
||||
return -EINVAL;
|
||||
|
||||
priv = drm->dev_private;
|
||||
connector_type = type;
|
||||
|
||||
DRM_INFO("[%s]-[%d] type=%d\n", __func__, __LINE__, type);
|
||||
|
||||
panel_instance = kzalloc(sizeof(*panel_instance), GFP_KERNEL);
|
||||
@@ -486,6 +505,7 @@ int meson_panel_dev_bind(struct drm_device *drm,
|
||||
panel_instance->base.connector_type = type;
|
||||
panel_instance->base.drm_priv = priv;
|
||||
panel_instance->con_dev = intf;
|
||||
panel_instance->base.vout_server = intf->vout_serv;
|
||||
encoder = &panel_instance->encoder;
|
||||
if (!encoder)
|
||||
return -EINVAL;
|
||||
@@ -599,6 +619,7 @@ free_resource:
|
||||
if (encoder)
|
||||
drm_encoder_cleanup(encoder);
|
||||
kfree(panel_instance);
|
||||
intf->conn = NULL;
|
||||
|
||||
DRM_DEBUG_KMS("%d Exit\n", ret);
|
||||
return ret;
|
||||
@@ -617,7 +638,19 @@ int meson_panel_dev_unbind(struct drm_device *drm,
|
||||
if (!drm_lcd)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Successful bind installs this connector and encoder with their fixed local
|
||||
* funcs tables, both containing destroy callbacks. Unbind runs before encoder
|
||||
* cleanup; connector cleanup does not replace the encoder funcs table.
|
||||
*/
|
||||
/* coverity[null_field:SUPPRESS] */
|
||||
drm_lcd->base.connector.funcs->destroy(&drm_lcd->base.connector);
|
||||
/*
|
||||
* Successful bind installs this connector and encoder with their fixed local
|
||||
* funcs tables, both containing destroy callbacks. Unbind runs before encoder
|
||||
* cleanup; connector cleanup does not replace the encoder funcs table.
|
||||
*/
|
||||
/* coverity[null_field:SUPPRESS] */
|
||||
drm_lcd->encoder.funcs->destroy(&drm_lcd->encoder);
|
||||
|
||||
kfree(drm_lcd);
|
||||
@@ -628,7 +661,7 @@ int meson_panel_dev_unbind(struct drm_device *drm,
|
||||
int am_meson_lcd_get_vrr_range(struct drm_connector *connector,
|
||||
struct drm_vrr_mode_group *groups, int max_group)
|
||||
{
|
||||
int ret, modes_cnt, i;
|
||||
int ret, modes_cnt = 0, i;
|
||||
struct meson_panel *am_lcd = connector_to_meson_panel(connector);
|
||||
struct meson_panel_dev *panel_dev = am_lcd->panel_dev;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user