Update source to Armbian-dev-202610.A311Y3

This commit is contained in:
2026-11-11 08:50:43 +08:00
parent 3428a94f6b
commit f459ef6a9e
12514 changed files with 2264376 additions and 468481 deletions
@@ -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;