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;
|
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;
|
unsigned int i;
|
||||||
struct drm_color_lut *lut;
|
struct drm_color_lut *lut;
|
||||||
void __iomem *lut_base;
|
void __iomem *lut_base;
|
||||||
bool lut_diff;
|
|
||||||
u16 lut_size;
|
|
||||||
u32 cfg_val, word;
|
u32 cfg_val, word;
|
||||||
|
|
||||||
/* If there's no gamma lut there's nothing to do here. */
|
/* If there's no gamma lut there's nothing to do here. */
|
||||||
if (!state->gamma_lut)
|
if (!state->gamma_lut)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* If we're called from AAL, dev is NULL */
|
lut_base = gamma->regs + DISP_GAMMA_LUT;
|
||||||
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 = (struct drm_color_lut *)state->gamma_lut->data;
|
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;
|
struct drm_color_lut diff, hwlut;
|
||||||
|
|
||||||
hwlut.red = drm_color_lut_extract(lut[i].red, 10);
|
hwlut.red = drm_color_lut_extract(lut[i].red, 10);
|
||||||
hwlut.green = drm_color_lut_extract(lut[i].green, 10);
|
hwlut.green = drm_color_lut_extract(lut[i].green, 10);
|
||||||
hwlut.blue = drm_color_lut_extract(lut[i].blue, 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_R, hwlut.red);
|
||||||
word |= FIELD_PREP(DISP_GAMMA_LUT_10BIT_G, hwlut.green);
|
word |= FIELD_PREP(DISP_GAMMA_LUT_10BIT_G, hwlut.green);
|
||||||
word |= FIELD_PREP(DISP_GAMMA_LUT_10BIT_B, hwlut.blue);
|
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);
|
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 */
|
/* Enable the gamma table */
|
||||||
cfg_val |= FIELD_PREP(GAMMA_LUT_EN, 1);
|
cfg_val |= FIELD_PREP(GAMMA_LUT_EN, 1);
|
||||||
|
|
||||||
writel(cfg_val, regs + DISP_GAMMA_CFG);
|
cfg_val = readl(gamma->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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void mtk_gamma_config(struct device *dev, unsigned int w,
|
void mtk_gamma_config(struct device *dev, unsigned int w,
|
||||||
|
|
Loading…
Add table
Reference in a new issue