mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
drm: Nuke mode->vrefresh
Get rid of mode->vrefresh and just calculate it on demand. Saves
a bit of space and avoids the cached value getting out of sync
with reality.
Mostly done with cocci, with the following manual fixups:
- Remove the now empty loop in drm_helper_probe_single_connector_modes()
- Fix __MODE() macro in ch7006_mode.c
- Fix DRM_MODE_ARG() macro in drm_modes.h
- Remove leftover comment from samsung_s6d16d0_mode
- Drop the TODO
@@
@@
struct drm_display_mode {
...
- int vrefresh;
...
};
@@
identifier N;
expression E;
@@
struct drm_display_mode N = {
- .vrefresh = E
};
@@
identifier N;
expression E;
@@
struct drm_display_mode N[...] = {
...,
{
- .vrefresh = E
}
,...
};
@@
expression E;
@@
{
DRM_MODE(...),
- .vrefresh = E,
}
@@
identifier M, R;
@@
int drm_mode_vrefresh(const struct drm_display_mode *M)
{
...
- if (M->vrefresh > 0)
- R = M->vrefresh;
- else
if (...) {
...
}
...
}
@@
struct drm_display_mode *p;
expression E;
@@
(
- p->vrefresh = E;
|
- p->vrefresh
+ drm_mode_vrefresh(p)
)
@@
struct drm_display_mode s;
expression E;
@@
(
- s.vrefresh = E;
|
- s.vrefresh
+ drm_mode_vrefresh(&s)
)
@@
expression E;
@@
- drm_mode_vrefresh(E) ? drm_mode_vrefresh(E) : drm_mode_vrefresh(E)
+ drm_mode_vrefresh(E)
@find_substruct@
identifier X;
identifier S;
@@
struct X {
...
struct drm_display_mode S;
...
};
@@
identifier find_substruct.S;
expression E;
identifier I;
@@
{
.S = {
- .vrefresh = E
}
}
@@
identifier find_substruct.S;
identifier find_substruct.X;
expression E;
identifier I;
@@
struct X I[...] = {
...,
.S = {
- .vrefresh = E
}
,...
};
v2: Drop TODO
v3: Rebase
v4: Rebase
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Joonyoung Shim <jy0922.shim@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Jerry Han <hanxu5@huaqin.corp-partner.google.com>
Cc: Icenowy Zheng <icenowy@aosc.io>
Cc: Jagan Teki <jagan@amarulasolutions.com>
Cc: Stefan Mavrodiev <stefan@olimex.com>
Cc: Robert Chiras <robert.chiras@nxp.com>
Cc: "Guido Günther" <agx@sigxcpu.org>
Cc: Purism Kernel Team <kernel@puri.sm>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: linux-amlogic@lists.infradead.org
Cc: nouveau@lists.freedesktop.org
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200428171940.19552-4-ville.syrjala@linux.intel.com
This commit is contained in:
@@ -327,26 +327,6 @@ Contact: Laurent Pinchart, Daniel Vetter
|
||||
Level: Intermediate (mostly because it is a huge tasks without good partial
|
||||
milestones, not technically itself that challenging)
|
||||
|
||||
Convert direct mode.vrefresh accesses to use drm_mode_vrefresh()
|
||||
----------------------------------------------------------------
|
||||
|
||||
drm_display_mode.vrefresh isn't guaranteed to be populated. As such, using it
|
||||
is risky and has been known to cause div-by-zero bugs. Fortunately, drm core
|
||||
has helper which will use mode.vrefresh if it's !0 and will calculate it from
|
||||
the timings when it's 0.
|
||||
|
||||
Use simple search/replace, or (more fun) cocci to replace instances of direct
|
||||
vrefresh access with a call to the helper. Check out
|
||||
https://lists.freedesktop.org/archives/dri-devel/2019-January/205186.html for
|
||||
inspiration.
|
||||
|
||||
Once all instances of vrefresh have been converted, remove vrefresh from
|
||||
drm_display_mode to avoid future use.
|
||||
|
||||
Contact: Sean Paul
|
||||
|
||||
Level: Starter
|
||||
|
||||
connector register/unregister fixes
|
||||
-----------------------------------
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge,
|
||||
|
||||
buf[0] = pixel_clock_10kHz & 0xff;
|
||||
buf[1] = pixel_clock_10kHz >> 8;
|
||||
buf[2] = adj->vrefresh;
|
||||
buf[2] = drm_mode_vrefresh(adj);
|
||||
buf[3] = 0x00;
|
||||
buf[4] = adj->hdisplay;
|
||||
buf[5] = adj->hdisplay >> 8;
|
||||
|
||||
@@ -186,7 +186,7 @@ again:
|
||||
continue;
|
||||
|
||||
if (cmdline_mode->refresh_specified) {
|
||||
if (mode->vrefresh != cmdline_mode->refresh)
|
||||
if (drm_mode_vrefresh(mode) != cmdline_mode->refresh)
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
+161
-167
File diff suppressed because it is too large
Load Diff
@@ -759,9 +759,7 @@ int drm_mode_vrefresh(const struct drm_display_mode *mode)
|
||||
{
|
||||
int refresh = 0;
|
||||
|
||||
if (mode->vrefresh > 0)
|
||||
refresh = mode->vrefresh;
|
||||
else if (mode->htotal > 0 && mode->vtotal > 0) {
|
||||
if (mode->htotal > 0 && mode->vtotal > 0) {
|
||||
unsigned int num, den;
|
||||
|
||||
num = mode->clock * 1000;
|
||||
@@ -1308,7 +1306,7 @@ static int drm_mode_compare(void *priv, struct list_head *lh_a, struct list_head
|
||||
if (diff)
|
||||
return diff;
|
||||
|
||||
diff = b->vrefresh - a->vrefresh;
|
||||
diff = drm_mode_vrefresh(b) - drm_mode_vrefresh(a);
|
||||
if (diff)
|
||||
return diff;
|
||||
|
||||
@@ -1921,7 +1919,7 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
|
||||
out->vsync_end = in->vsync_end;
|
||||
out->vtotal = in->vtotal;
|
||||
out->vscan = in->vscan;
|
||||
out->vrefresh = in->vrefresh;
|
||||
out->vrefresh = drm_mode_vrefresh(in);
|
||||
out->flags = in->flags;
|
||||
out->type = in->type;
|
||||
|
||||
@@ -1981,7 +1979,6 @@ int drm_mode_convert_umode(struct drm_device *dev,
|
||||
out->vsync_end = in->vsync_end;
|
||||
out->vtotal = in->vtotal;
|
||||
out->vscan = in->vscan;
|
||||
out->vrefresh = in->vrefresh;
|
||||
out->flags = in->flags;
|
||||
/*
|
||||
* Old xf86-video-vmware (possibly others too) used to
|
||||
|
||||
@@ -534,9 +534,6 @@ prune:
|
||||
if (list_empty(&connector->modes))
|
||||
return 0;
|
||||
|
||||
list_for_each_entry(mode, &connector->modes, head)
|
||||
mode->vrefresh = drm_mode_vrefresh(mode);
|
||||
|
||||
drm_mode_sort(&connector->modes);
|
||||
|
||||
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] probed modes :\n", connector->base.id,
|
||||
|
||||
@@ -921,7 +921,8 @@ static int hdmi_mode_valid(struct drm_connector *connector,
|
||||
|
||||
DRM_DEV_DEBUG_KMS(hdata->dev,
|
||||
"xres=%d, yres=%d, refresh=%d, intl=%d clock=%d\n",
|
||||
mode->hdisplay, mode->vdisplay, mode->vrefresh,
|
||||
mode->hdisplay, mode->vdisplay,
|
||||
drm_mode_vrefresh(mode),
|
||||
(mode->flags & DRM_MODE_FLAG_INTERLACE) ? true :
|
||||
false, mode->clock * 1000);
|
||||
|
||||
@@ -1020,7 +1021,7 @@ static bool hdmi_mode_fixup(struct drm_encoder *encoder,
|
||||
DRM_DEV_DEBUG_KMS(dev->dev,
|
||||
"Adjusted Mode: [%d]x[%d] [%d]Hz\n",
|
||||
m->hdisplay, m->vdisplay,
|
||||
m->vrefresh);
|
||||
drm_mode_vrefresh(m));
|
||||
|
||||
drm_mode_copy(adjusted_mode, m);
|
||||
break;
|
||||
|
||||
@@ -1046,7 +1046,7 @@ static int mixer_mode_valid(struct exynos_drm_crtc *crtc,
|
||||
u32 w = mode->hdisplay, h = mode->vdisplay;
|
||||
|
||||
DRM_DEV_DEBUG_KMS(ctx->dev, "xres=%d, yres=%d, refresh=%d, intl=%d\n",
|
||||
w, h, mode->vrefresh,
|
||||
w, h, drm_mode_vrefresh(mode),
|
||||
!!(mode->flags & DRM_MODE_FLAG_INTERLACE));
|
||||
|
||||
if (ctx->mxr_ver == MXR_VER_128_0_0_184)
|
||||
|
||||
@@ -121,7 +121,6 @@ const struct ch7006_tv_norm_info ch7006_tv_norms[] = {
|
||||
.vscan = 0, \
|
||||
.flags = DRM_MODE_FLAG_##hsynp##HSYNC | \
|
||||
DRM_MODE_FLAG_##vsynp##VSYNC, \
|
||||
.vrefresh = 0, \
|
||||
}, \
|
||||
.enc_hdisp = e_hd, \
|
||||
.enc_vdisp = e_vd, \
|
||||
|
||||
@@ -8891,7 +8891,6 @@ void intel_mode_from_pipe_config(struct drm_display_mode *mode,
|
||||
|
||||
mode->clock = pipe_config->hw.adjusted_mode.crtc_clock;
|
||||
|
||||
mode->vrefresh = drm_mode_vrefresh(mode);
|
||||
drm_mode_set_name(mode);
|
||||
}
|
||||
|
||||
|
||||
@@ -1098,10 +1098,10 @@ static void drrs_status_per_crtc(struct seq_file *m,
|
||||
seq_puts(m, "\n\t\t");
|
||||
if (drrs->refresh_rate_type == DRRS_HIGH_RR) {
|
||||
seq_puts(m, "DRRS_State: DRRS_HIGH_RR\n");
|
||||
vrefresh = panel->fixed_mode->vrefresh;
|
||||
vrefresh = drm_mode_vrefresh(panel->fixed_mode);
|
||||
} else if (drrs->refresh_rate_type == DRRS_LOW_RR) {
|
||||
seq_puts(m, "DRRS_State: DRRS_LOW_RR\n");
|
||||
vrefresh = panel->downclock_mode->vrefresh;
|
||||
vrefresh = drm_mode_vrefresh(panel->downclock_mode);
|
||||
} else {
|
||||
seq_printf(m, "DRRS_State: Unknown(%d)\n",
|
||||
drrs->refresh_rate_type);
|
||||
|
||||
@@ -7356,7 +7356,7 @@ static void intel_dp_set_drrs_state(struct drm_i915_private *dev_priv,
|
||||
return;
|
||||
}
|
||||
|
||||
if (intel_dp->attached_connector->panel.downclock_mode->vrefresh ==
|
||||
if (drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode) ==
|
||||
refresh_rate)
|
||||
index = DRRS_LOW_RR;
|
||||
|
||||
@@ -7469,7 +7469,7 @@ void intel_edp_drrs_disable(struct intel_dp *intel_dp,
|
||||
|
||||
if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
|
||||
intel_dp_set_drrs_state(dev_priv, old_crtc_state,
|
||||
intel_dp->attached_connector->panel.fixed_mode->vrefresh);
|
||||
drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
|
||||
|
||||
dev_priv->drrs.dp = NULL;
|
||||
mutex_unlock(&dev_priv->drrs.mutex);
|
||||
@@ -7502,7 +7502,7 @@ static void intel_edp_drrs_downclock_work(struct work_struct *work)
|
||||
struct drm_crtc *crtc = dp_to_dig_port(intel_dp)->base.base.crtc;
|
||||
|
||||
intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
|
||||
intel_dp->attached_connector->panel.downclock_mode->vrefresh);
|
||||
drm_mode_vrefresh(intel_dp->attached_connector->panel.downclock_mode));
|
||||
}
|
||||
|
||||
unlock:
|
||||
@@ -7548,7 +7548,7 @@ void intel_edp_drrs_invalidate(struct drm_i915_private *dev_priv,
|
||||
/* invalidate means busy screen hence upclock */
|
||||
if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
|
||||
intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
|
||||
intel_dp->attached_connector->panel.fixed_mode->vrefresh);
|
||||
drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
|
||||
|
||||
mutex_unlock(&dev_priv->drrs.mutex);
|
||||
}
|
||||
@@ -7594,7 +7594,7 @@ void intel_edp_drrs_flush(struct drm_i915_private *dev_priv,
|
||||
/* flush means busy screen hence upclock */
|
||||
if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
|
||||
intel_dp_set_drrs_state(dev_priv, to_intel_crtc(crtc)->config,
|
||||
intel_dp->attached_connector->panel.fixed_mode->vrefresh);
|
||||
drm_mode_vrefresh(intel_dp->attached_connector->panel.fixed_mode));
|
||||
|
||||
/*
|
||||
* flush also means no more activity hence schedule downclock, if all
|
||||
|
||||
@@ -1036,9 +1036,6 @@ intel_tv_mode_to_mode(struct drm_display_mode *mode,
|
||||
/* TV has it's own notion of sync and other mode flags, so clear them. */
|
||||
mode->flags = 0;
|
||||
|
||||
mode->vrefresh = 0;
|
||||
mode->vrefresh = drm_mode_vrefresh(mode);
|
||||
|
||||
snprintf(mode->name, sizeof(mode->name),
|
||||
"%dx%d%c (%s)",
|
||||
mode->hdisplay, mode->vdisplay,
|
||||
|
||||
@@ -538,7 +538,7 @@ static void mcde_dsi_setup_video_mode(struct mcde_dsi *d,
|
||||
*/
|
||||
/* (ps/s) / (pixels/s) = ps/pixels */
|
||||
pclk = DIV_ROUND_UP_ULL(1000000000000,
|
||||
(mode->vrefresh * mode->htotal * mode->vtotal));
|
||||
(drm_mode_vrefresh(mode) * mode->htotal * mode->vtotal));
|
||||
dev_dbg(d->dev, "picoseconds between two pixels: %llu\n",
|
||||
pclk);
|
||||
|
||||
@@ -568,7 +568,7 @@ static void mcde_dsi_setup_video_mode(struct mcde_dsi *d,
|
||||
bpl *= d->mdsi->lanes;
|
||||
dev_dbg(d->dev,
|
||||
"calculated bytes per line: %llu @ %d Hz with HS %lu Hz\n",
|
||||
bpl, mode->vrefresh, d->mdsi->hs_rate);
|
||||
bpl, drm_mode_vrefresh(mode), d->mdsi->hs_rate);
|
||||
|
||||
/*
|
||||
* 6 is header + checksum, header = 4 bytes, checksum = 2 bytes
|
||||
@@ -644,7 +644,7 @@ static void mcde_dsi_setup_video_mode(struct mcde_dsi *d,
|
||||
dev_err(d->dev, "video block does not fit on line!\n");
|
||||
dev_err(d->dev,
|
||||
"calculated bytes per line: %llu @ %d Hz\n",
|
||||
bpl, mode->vrefresh);
|
||||
bpl, drm_mode_vrefresh(mode));
|
||||
dev_err(d->dev,
|
||||
"bytes per line (blkline_pck) %u bytes\n",
|
||||
blkline_pck);
|
||||
|
||||
@@ -164,7 +164,7 @@ static void mtk_drm_crtc_mode_set_nofb(struct drm_crtc *crtc)
|
||||
|
||||
state->pending_width = crtc->mode.hdisplay;
|
||||
state->pending_height = crtc->mode.vdisplay;
|
||||
state->pending_vrefresh = crtc->mode.vrefresh;
|
||||
state->pending_vrefresh = drm_mode_vrefresh(&crtc->mode);
|
||||
wmb(); /* Make sure the above parameters are set before update */
|
||||
state->pending_config = true;
|
||||
}
|
||||
@@ -263,7 +263,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc)
|
||||
|
||||
width = crtc->state->adjusted_mode.hdisplay;
|
||||
height = crtc->state->adjusted_mode.vdisplay;
|
||||
vrefresh = crtc->state->adjusted_mode.vrefresh;
|
||||
vrefresh = drm_mode_vrefresh(&crtc->state->adjusted_mode);
|
||||
|
||||
drm_for_each_encoder(encoder, crtc->dev) {
|
||||
if (encoder->crtc != crtc)
|
||||
|
||||
@@ -1258,7 +1258,7 @@ static int mtk_hdmi_conn_mode_valid(struct drm_connector *conn,
|
||||
struct drm_bridge *next_bridge;
|
||||
|
||||
dev_dbg(hdmi->dev, "xres=%d, yres=%d, refresh=%d, intl=%d clock=%d\n",
|
||||
mode->hdisplay, mode->vdisplay, mode->vrefresh,
|
||||
mode->hdisplay, mode->vdisplay, drm_mode_vrefresh(mode),
|
||||
!!(mode->flags & DRM_MODE_FLAG_INTERLACE), mode->clock * 1000);
|
||||
|
||||
next_bridge = drm_bridge_get_next_bridge(&hdmi->bridge);
|
||||
|
||||
@@ -48,7 +48,6 @@ struct meson_cvbs_mode meson_cvbs_modes[MESON_CVBS_MODES_COUNT] = {
|
||||
DRM_MODE("720x576i", DRM_MODE_TYPE_DRIVER, 13500,
|
||||
720, 732, 795, 864, 0, 576, 580, 586, 625, 0,
|
||||
DRM_MODE_FLAG_INTERLACE),
|
||||
.vrefresh = 50,
|
||||
.picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3,
|
||||
},
|
||||
},
|
||||
@@ -58,7 +57,6 @@ struct meson_cvbs_mode meson_cvbs_modes[MESON_CVBS_MODES_COUNT] = {
|
||||
DRM_MODE("720x480i", DRM_MODE_TYPE_DRIVER, 13500,
|
||||
720, 739, 801, 858, 0, 480, 488, 494, 525, 0,
|
||||
DRM_MODE_FLAG_INTERLACE),
|
||||
.vrefresh = 60,
|
||||
.picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -59,7 +59,6 @@ nouveau_conn_native_mode(struct drm_connector *connector)
|
||||
int high_w = 0, high_h = 0, high_v = 0;
|
||||
|
||||
list_for_each_entry(mode, &connector->probed_modes, head) {
|
||||
mode->vrefresh = drm_mode_vrefresh(mode);
|
||||
if (helper->mode_valid(connector, mode) != MODE_OK ||
|
||||
(mode->flags & DRM_MODE_FLAG_INTERLACE))
|
||||
continue;
|
||||
@@ -80,12 +79,12 @@ nouveau_conn_native_mode(struct drm_connector *connector)
|
||||
continue;
|
||||
|
||||
if (mode->hdisplay == high_w && mode->vdisplay == high_h &&
|
||||
mode->vrefresh < high_v)
|
||||
drm_mode_vrefresh(mode) < high_v)
|
||||
continue;
|
||||
|
||||
high_w = mode->hdisplay;
|
||||
high_h = mode->vdisplay;
|
||||
high_v = mode->vrefresh;
|
||||
high_v = drm_mode_vrefresh(mode);
|
||||
largest = mode;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,6 @@ static const struct versatile_panel_type versatile_panels[] = {
|
||||
.vsync_start = 240 + 5,
|
||||
.vsync_end = 240 + 5 + 6,
|
||||
.vtotal = 240 + 5 + 6 + 5,
|
||||
.vrefresh = 116,
|
||||
.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
|
||||
},
|
||||
},
|
||||
@@ -167,7 +166,6 @@ static const struct versatile_panel_type versatile_panels[] = {
|
||||
.vsync_start = 480 + 11,
|
||||
.vsync_end = 480 + 11 + 2,
|
||||
.vtotal = 480 + 11 + 2 + 32,
|
||||
.vrefresh = 60,
|
||||
.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
|
||||
},
|
||||
},
|
||||
@@ -190,7 +188,6 @@ static const struct versatile_panel_type versatile_panels[] = {
|
||||
.vsync_start = 220 + 0,
|
||||
.vsync_end = 220 + 0 + 2,
|
||||
.vtotal = 220 + 0 + 2 + 1,
|
||||
.vrefresh = 390,
|
||||
.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
|
||||
},
|
||||
.bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
|
||||
@@ -214,7 +211,6 @@ static const struct versatile_panel_type versatile_panels[] = {
|
||||
.vsync_start = 320 + 2,
|
||||
.vsync_end = 320 + 2 + 2,
|
||||
.vtotal = 320 + 2 + 2 + 2,
|
||||
.vrefresh = 116,
|
||||
.flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
|
||||
},
|
||||
.bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
|
||||
|
||||
@@ -183,7 +183,6 @@ static const struct drm_display_mode tm5p5_nt35596_mode = {
|
||||
.vsync_start = 1920 + 4,
|
||||
.vsync_end = 1920 + 4 + 2,
|
||||
.vtotal = 1920 + 4 + 2 + 4,
|
||||
.vrefresh = 60,
|
||||
.width_mm = 68,
|
||||
.height_mm = 121,
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user