18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * rcar_cmm.h -- R-Car Display Unit Color Management Module
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2019 Jacopo Mondi <jacopo+renesas@jmondi.org>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __RCAR_CMM_H__
98c2ecf20Sopenharmony_ci#define __RCAR_CMM_H__
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define CM2_LUT_SIZE		256
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistruct drm_color_lut;
148c2ecf20Sopenharmony_cistruct platform_device;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/**
178c2ecf20Sopenharmony_ci * struct rcar_cmm_config - CMM configuration
188c2ecf20Sopenharmony_ci *
198c2ecf20Sopenharmony_ci * @lut:	1D-LUT configuration
208c2ecf20Sopenharmony_ci * @lut.table:	1D-LUT table entries. Disable LUT operations when NULL
218c2ecf20Sopenharmony_ci */
228c2ecf20Sopenharmony_cistruct rcar_cmm_config {
238c2ecf20Sopenharmony_ci	struct {
248c2ecf20Sopenharmony_ci		struct drm_color_lut *table;
258c2ecf20Sopenharmony_ci	} lut;
268c2ecf20Sopenharmony_ci};
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_DRM_RCAR_CMM)
298c2ecf20Sopenharmony_ciint rcar_cmm_init(struct platform_device *pdev);
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ciint rcar_cmm_enable(struct platform_device *pdev);
328c2ecf20Sopenharmony_civoid rcar_cmm_disable(struct platform_device *pdev);
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciint rcar_cmm_setup(struct platform_device *pdev,
358c2ecf20Sopenharmony_ci		   const struct rcar_cmm_config *config);
368c2ecf20Sopenharmony_ci#else
378c2ecf20Sopenharmony_cistatic inline int rcar_cmm_init(struct platform_device *pdev)
388c2ecf20Sopenharmony_ci{
398c2ecf20Sopenharmony_ci	return -ENODEV;
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistatic inline int rcar_cmm_enable(struct platform_device *pdev)
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	return 0;
458c2ecf20Sopenharmony_ci}
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_cistatic inline void rcar_cmm_disable(struct platform_device *pdev)
488c2ecf20Sopenharmony_ci{
498c2ecf20Sopenharmony_ci}
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_cistatic inline int rcar_cmm_setup(struct platform_device *pdev,
528c2ecf20Sopenharmony_ci				 const struct rcar_cmm_config *config)
538c2ecf20Sopenharmony_ci{
548c2ecf20Sopenharmony_ci	return 0;
558c2ecf20Sopenharmony_ci}
568c2ecf20Sopenharmony_ci#endif /* IS_ENABLED(CONFIG_DRM_RCAR_CMM) */
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#endif /* __RCAR_CMM_H__ */
59