drm/mediatek: De-commonize disp_aal/disp_gamma gamma_set functions
In preparation for adding a 12-bits gamma support for the DISP_GAMMA IP, remove the mtk_gamma_set_common() function and move the relevant bits in mtk_gamma_set() for DISP_GAMMA and mtk_aal_gamma_set() for DISP_AAL: since the latter has no more support for gamma manipulation (being moved to a different IP) in newer revisions, those functions are about to diverge and it makes no sense to keep a common one (with all the complications of passing common data and making exclusions for device driver data) for just a few bits. This commit brings no functional changes. Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com> Reviewed-by: CK Hu <ck.hu@mediatek.com> Link: https://patchwork.kernel.org/project/dri-devel/patch/20231012095736.100784-9-angelogioacchino.delregno@collabora.com/ Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
This commit is contained in:
parent
36e5da1377
commit
a6b39cd248
1 changed files with 7 additions and 27 deletions
|
@ -69,41 +69,28 @@ unsigned int mtk_gamma_get_lut_size(struct device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crtc_state *state)
|
||||
void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state)
|
||||
{
|
||||
struct mtk_disp_gamma *gamma;
|
||||
struct mtk_disp_gamma *gamma = dev_get_drvdata(dev);
|
||||
unsigned int i;
|
||||
struct drm_color_lut *lut;
|
||||
void __iomem *lut_base;
|
||||
bool lut_diff;
|
||||
u16 lut_size;
|
||||
u32 cfg_val, word;
|
||||
|
||||
/* If there's no gamma lut there's nothing to do here. */
|
||||
if (!state->gamma_lut)
|
||||
return;
|
||||
|
||||
/* If we're called from AAL, dev is NULL */
|
||||
gamma = dev ? dev_get_drvdata(dev) : NULL;
|
||||
|
||||
if (gamma && gamma->data) {
|
||||
lut_diff = gamma->data->lut_diff;
|
||||
lut_size = gamma->data->lut_size;
|
||||
} else {
|
||||
lut_diff = false;
|
||||
lut_size = 512;
|
||||
}
|
||||
|
||||
lut_base = regs + DISP_GAMMA_LUT;
|
||||
lut_base = gamma->regs + DISP_GAMMA_LUT;
|
||||
lut = (struct drm_color_lut *)state->gamma_lut->data;
|
||||
for (i = 0; i < lut_size; i++) {
|
||||
for (i = 0; i < gamma->data->lut_size; i++) {
|
||||
struct drm_color_lut diff, hwlut;
|
||||
|
||||
hwlut.red = drm_color_lut_extract(lut[i].red, 10);
|
||||
hwlut.green = drm_color_lut_extract(lut[i].green, 10);
|
||||
hwlut.blue = drm_color_lut_extract(lut[i].blue, 10);
|
||||
|
||||
if (!lut_diff || (i % 2 == 0)) {
|
||||
if (!gamma->data->lut_diff || (i % 2 == 0)) {
|
||||
word = FIELD_PREP(DISP_GAMMA_LUT_10BIT_R, hwlut.red);
|
||||
word |= FIELD_PREP(DISP_GAMMA_LUT_10BIT_G, hwlut.green);
|
||||
word |= FIELD_PREP(DISP_GAMMA_LUT_10BIT_B, hwlut.blue);
|
||||
|
@ -124,19 +111,12 @@ void mtk_gamma_set_common(struct device *dev, void __iomem *regs, struct drm_crt
|
|||
writel(word, lut_base + i * 4);
|
||||
}
|
||||
|
||||
cfg_val = readl(regs + DISP_GAMMA_CFG);
|
||||
cfg_val = readl(gamma->regs + DISP_GAMMA_CFG);
|
||||
|
||||
/* Enable the gamma table */
|
||||
cfg_val |= FIELD_PREP(GAMMA_LUT_EN, 1);
|
||||
|
||||
writel(cfg_val, regs + DISP_GAMMA_CFG);
|
||||
}
|
||||
|
||||
void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state)
|
||||
{
|
||||
struct mtk_disp_gamma *gamma = dev_get_drvdata(dev);
|
||||
|
||||
mtk_gamma_set_common(dev, gamma->regs, state);
|
||||
cfg_val = readl(gamma->regs + DISP_GAMMA_CFG);
|
||||
}
|
||||
|
||||
void mtk_gamma_config(struct device *dev, unsigned int w,
|
||||
|
|
Loading…
Add table
Reference in a new issue