mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 11:50:43 +09:00
drm/rockchip/rk618: rgb: Add dithering support for RGB666 LCD panels
Change-Id: I359cb841b14ba56d68d42e5bf2f40dae05ff9f62 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
@@ -25,8 +25,19 @@ void rk618_frc_dither_disable(struct rk618 *rk618)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rk618_frc_dither_disable);
|
||||
|
||||
void rk618_frc_dither_enable(struct rk618 *rk618)
|
||||
void rk618_frc_dither_enable(struct rk618 *rk618, u32 bus_format)
|
||||
{
|
||||
switch (bus_format) {
|
||||
case MEDIA_BUS_FMT_RGB666_1X18:
|
||||
regmap_write(rk618->regmap, RK618_FRC_REG, FRC_OUT_MODE_RGB666);
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||||
regmap_write(rk618->regmap, RK618_FRC_REG, FRC_OUT_MODE_RGB888);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
regmap_write(rk618->regmap, RK618_FRC_REG, FRC_DITHER_ENABLE);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rk618_frc_dither_enable);
|
||||
|
||||
@@ -8,10 +8,11 @@
|
||||
#ifndef _RK618_DITHER_H_
|
||||
#define _RK618_DITHER_H_
|
||||
|
||||
#include <uapi/linux/media-bus-format.h>
|
||||
#include <linux/mfd/rk618.h>
|
||||
|
||||
void rk618_frc_dither_disable(struct rk618 *rk618);
|
||||
void rk618_frc_dither_enable(struct rk618 *rk618);
|
||||
void rk618_frc_dither_enable(struct rk618 *rk618, u32 bus_format);
|
||||
void rk618_frc_dclk_invert(struct rk618 *rk618);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -94,12 +94,29 @@ static const struct drm_connector_funcs rk618_rgb_connector_funcs = {
|
||||
static void rk618_rgb_bridge_enable(struct drm_bridge *bridge)
|
||||
{
|
||||
struct rk618_rgb *rgb = bridge_to_rgb(bridge);
|
||||
struct drm_connector *connector = &rgb->connector;
|
||||
struct drm_display_info *info = &connector->display_info;
|
||||
u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
u32 value;
|
||||
|
||||
clk_prepare_enable(rgb->clock);
|
||||
|
||||
rk618_frc_dclk_invert(rgb->parent);
|
||||
|
||||
if (info->num_bus_formats)
|
||||
bus_format = info->bus_formats[0];
|
||||
|
||||
switch (bus_format) {
|
||||
case MEDIA_BUS_FMT_RGB666_1X18:
|
||||
case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
|
||||
rk618_frc_dither_enable(rgb->parent, bus_format);
|
||||
break;
|
||||
case MEDIA_BUS_FMT_RGB888_1X24:
|
||||
default:
|
||||
rk618_frc_dither_disable(rgb->parent);
|
||||
break;
|
||||
}
|
||||
|
||||
dev_dbg(rgb->dev, "id=%d\n", rgb->id);
|
||||
|
||||
if (rgb->id) {
|
||||
|
||||
Reference in New Issue
Block a user