xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/rockchip/rk618/rk618_dither.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2017 Rockchip Electronics Co. Ltd.
4  *
5  * Author: Wyon Bi <bivvy.bi@rock-chips.com>
6  */
7 
8 #include <linux/module.h>
9 #include "rk618_dither.h"
10 
11 #define RK618_FRC_REG			0x0054
12 #define FRC_DEN_INV			HIWORD_UPDATE(1, 6, 6)
13 #define FRC_SYNC_INV			HIWORD_UPDATE(1, 5, 5)
14 #define FRC_DCLK_INV			HIWORD_UPDATE(1, 4, 4)
15 #define FRC_OUT_ZERO			HIWORD_UPDATE(1, 3, 3)
16 #define FRC_OUT_MODE_RGB666		HIWORD_UPDATE(1, 2, 2)
17 #define FRC_OUT_MODE_RGB888		HIWORD_UPDATE(0, 2, 2)
18 #define FRC_DITHER_MODE_HI_FRC		HIWORD_UPDATE(1, 1, 1)
19 #define FRC_DITHER_MODE_FRC		HIWORD_UPDATE(0, 1, 1)
20 #define FRC_DITHER_ENABLE		HIWORD_UPDATE(1, 0, 0)
21 #define FRC_DITHER_DISABLE		HIWORD_UPDATE(0, 0, 0)
22 
rk618_frc_dither_init(struct rk618 * rk618,u32 bus_format)23 void rk618_frc_dither_init(struct rk618 *rk618, u32 bus_format)
24 {
25 	u32 val;
26 
27 	switch (bus_format) {
28 	case MEDIA_BUS_FMT_RGB666_1X18:
29 	case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
30 		val = FRC_OUT_MODE_RGB666 | FRC_DITHER_DISABLE;
31 		break;
32 	case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
33 		val = FRC_OUT_MODE_RGB888 | FRC_DITHER_ENABLE;
34 		break;
35 	case MEDIA_BUS_FMT_RGB888_1X24:
36 	case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
37 	case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
38 	default:
39 		val = FRC_OUT_MODE_RGB888 | FRC_DITHER_DISABLE;
40 		break;
41 	}
42 
43 	regmap_write(rk618->regmap, RK618_FRC_REG, val);
44 }
45 EXPORT_SYMBOL_GPL(rk618_frc_dither_init);
46 
rk618_frc_dclk_invert(struct rk618 * rk618)47 void rk618_frc_dclk_invert(struct rk618 *rk618)
48 {
49 	regmap_write(rk618->regmap, RK618_FRC_REG, FRC_DCLK_INV);
50 }
51 EXPORT_SYMBOL_GPL(rk618_frc_dclk_invert);
52 
53 MODULE_LICENSE("GPL");
54