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