[PATCH 2/5] drm: zte: move struct vou_inf into zx_vou driver
Sean Paul
seanpaul at chromium.org
Mon Jan 23 15:30:05 UTC 2017
On Fri, Jan 20, 2017 at 12:24:57AM +0800, Shawn Guo wrote:
> From: Shawn Guo <shawn.guo at linaro.org>
>
> Although data in struct vou_inf is defined per output device, it doesn't
> belong to the device itself but VOU control module. All these data can
> just be defined in VOU driver, and output device driver only needs to
> invoke VOU driver function with device ID to enable/disable specific
> output device.
>
Reviewed-by: Sean Paul <seanpaul at chromium.org>
> Signed-off-by: Shawn Guo <shawn.guo at linaro.org>
> ---
> drivers/gpu/drm/zte/zx_hdmi.c | 12 ++----------
> drivers/gpu/drm/zte/zx_vou.c | 31 ++++++++++++++++++++++++-------
> drivers/gpu/drm/zte/zx_vou.h | 11 ++---------
> 3 files changed, 28 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/zte/zx_hdmi.c b/drivers/gpu/drm/zte/zx_hdmi.c
> index 6bf6c364811e..2f1e278ab50e 100644
> --- a/drivers/gpu/drm/zte/zx_hdmi.c
> +++ b/drivers/gpu/drm/zte/zx_hdmi.c
> @@ -53,13 +53,6 @@ struct zx_hdmi {
>
> #define to_zx_hdmi(x) container_of(x, struct zx_hdmi, x)
>
> -static const struct vou_inf vou_inf_hdmi = {
> - .id = VOU_HDMI,
> - .data_sel = VOU_YUV444,
> - .clocks_en_bits = BIT(24) | BIT(18) | BIT(6),
> - .clocks_sel_bits = BIT(13) | BIT(2),
> -};
> -
> static inline u8 hdmi_readb(struct zx_hdmi *hdmi, u16 offset)
> {
> return readl_relaxed(hdmi->mmio + offset * 4);
> @@ -238,14 +231,14 @@ static void zx_hdmi_encoder_enable(struct drm_encoder *encoder)
>
> zx_hdmi_hw_enable(hdmi);
>
> - vou_inf_enable(hdmi->inf, encoder->crtc);
> + vou_inf_enable(VOU_HDMI, encoder->crtc);
> }
>
> static void zx_hdmi_encoder_disable(struct drm_encoder *encoder)
> {
> struct zx_hdmi *hdmi = to_zx_hdmi(encoder);
>
> - vou_inf_disable(hdmi->inf, encoder->crtc);
> + vou_inf_disable(VOU_HDMI, encoder->crtc);
>
> zx_hdmi_hw_disable(hdmi);
>
> @@ -523,7 +516,6 @@ static int zx_hdmi_bind(struct device *dev, struct device *master, void *data)
>
> hdmi->dev = dev;
> hdmi->drm = drm;
> - hdmi->inf = &vou_inf_hdmi;
>
> dev_set_drvdata(dev, hdmi);
>
> diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> index 8c4f0e2885f3..c48704b4425a 100644
> --- a/drivers/gpu/drm/zte/zx_vou.c
> +++ b/drivers/gpu/drm/zte/zx_vou.c
> @@ -158,6 +158,21 @@ struct zx_vou_hw {
> struct zx_crtc *aux_crtc;
> };
>
> +struct vou_inf {
> + enum vou_inf_id id;
> + enum vou_inf_data_sel data_sel;
> + u32 clocks_en_bits;
> + u32 clocks_sel_bits;
> +};
> +
> +static struct vou_inf vou_infs[] = {
> + [VOU_HDMI] = {
> + .data_sel = VOU_YUV444,
> + .clocks_en_bits = BIT(24) | BIT(18) | BIT(6),
> + .clocks_sel_bits = BIT(13) | BIT(2),
> + },
> +};
> +
> static inline struct zx_vou_hw *crtc_to_vou(struct drm_crtc *crtc)
> {
> struct zx_crtc *zcrtc = to_zx_crtc(crtc);
> @@ -165,20 +180,21 @@ static inline struct zx_vou_hw *crtc_to_vou(struct drm_crtc *crtc)
> return zcrtc->vou;
> }
>
> -void vou_inf_enable(const struct vou_inf *inf, struct drm_crtc *crtc)
> +void vou_inf_enable(enum vou_inf_id id, struct drm_crtc *crtc)
> {
> struct zx_crtc *zcrtc = to_zx_crtc(crtc);
> struct zx_vou_hw *vou = zcrtc->vou;
> + struct vou_inf *inf = &vou_infs[id];
> bool is_main = zcrtc->chn_type == VOU_CHN_MAIN;
> - u32 data_sel_shift = inf->id << 1;
> + u32 data_sel_shift = id << 1;
>
> /* Select data format */
> zx_writel_mask(vou->vouctl + VOU_INF_DATA_SEL, 0x3 << data_sel_shift,
> inf->data_sel << data_sel_shift);
>
> /* Select channel */
> - zx_writel_mask(vou->vouctl + VOU_INF_CH_SEL, 0x1 << inf->id,
> - zcrtc->chn_type << inf->id);
> + zx_writel_mask(vou->vouctl + VOU_INF_CH_SEL, 0x1 << id,
> + zcrtc->chn_type << id);
>
> /* Select interface clocks */
> zx_writel_mask(vou->vouctl + VOU_CLK_SEL, inf->clocks_sel_bits,
> @@ -189,15 +205,16 @@ void vou_inf_enable(const struct vou_inf *inf, struct drm_crtc *crtc)
> inf->clocks_en_bits);
>
> /* Enable the device */
> - zx_writel_mask(vou->vouctl + VOU_INF_EN, 1 << inf->id, 1 << inf->id);
> + zx_writel_mask(vou->vouctl + VOU_INF_EN, 1 << id, 1 << id);
> }
>
> -void vou_inf_disable(const struct vou_inf *inf, struct drm_crtc *crtc)
> +void vou_inf_disable(enum vou_inf_id id, struct drm_crtc *crtc)
> {
> struct zx_vou_hw *vou = crtc_to_vou(crtc);
> + struct vou_inf *inf = &vou_infs[id];
>
> /* Disable the device */
> - zx_writel_mask(vou->vouctl + VOU_INF_EN, 1 << inf->id, 0);
> + zx_writel_mask(vou->vouctl + VOU_INF_EN, 1 << id, 0);
>
> /* Disable interface clocks */
> zx_writel_mask(vou->vouctl + VOU_CLK_EN, inf->clocks_en_bits, 0);
> diff --git a/drivers/gpu/drm/zte/zx_vou.h b/drivers/gpu/drm/zte/zx_vou.h
> index 4b4339be641b..a41a0ad49857 100644
> --- a/drivers/gpu/drm/zte/zx_vou.h
> +++ b/drivers/gpu/drm/zte/zx_vou.h
> @@ -30,15 +30,8 @@ enum vou_inf_data_sel {
> VOU_RGB_666 = 3,
> };
>
> -struct vou_inf {
> - enum vou_inf_id id;
> - enum vou_inf_data_sel data_sel;
> - u32 clocks_en_bits;
> - u32 clocks_sel_bits;
> -};
> -
> -void vou_inf_enable(const struct vou_inf *inf, struct drm_crtc *crtc);
> -void vou_inf_disable(const struct vou_inf *inf, struct drm_crtc *crtc);
> +void vou_inf_enable(enum vou_inf_id id, struct drm_crtc *crtc);
> +void vou_inf_disable(enum vou_inf_id id, struct drm_crtc *crtc);
>
> int zx_vou_enable_vblank(struct drm_device *drm, unsigned int pipe);
> void zx_vou_disable_vblank(struct drm_device *drm, unsigned int pipe);
> --
> 1.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Sean Paul, Software Engineer, Google / Chromium OS
More information about the dri-devel
mailing list