Path: blob/master/drivers/gpu/drm/bridge/imx/imx-ldb-helper.h
26517 views
/* SPDX-License-Identifier: GPL-2.0+ */12/*3* Copyright 2019,2020,2022 NXP4*/56#ifndef __IMX_LDB_HELPER__7#define __IMX_LDB_HELPER__89#include <linux/device.h>10#include <linux/kernel.h>11#include <linux/of.h>12#include <linux/regmap.h>1314#include <drm/drm_atomic.h>15#include <drm/drm_bridge.h>16#include <drm/drm_device.h>17#include <drm/drm_encoder.h>18#include <drm/drm_modeset_helper_vtables.h>1920#define LDB_CH0_MODE_EN_TO_DI0 BIT(0)21#define LDB_CH0_MODE_EN_TO_DI1 (3 << 0)22#define LDB_CH0_MODE_EN_MASK (3 << 0)23#define LDB_CH1_MODE_EN_TO_DI0 BIT(2)24#define LDB_CH1_MODE_EN_TO_DI1 (3 << 2)25#define LDB_CH1_MODE_EN_MASK (3 << 2)26#define LDB_SPLIT_MODE_EN BIT(4)27#define LDB_DATA_WIDTH_CH0_24 BIT(5)28#define LDB_BIT_MAP_CH0_JEIDA BIT(6)29#define LDB_DATA_WIDTH_CH1_24 BIT(7)30#define LDB_BIT_MAP_CH1_JEIDA BIT(8)31#define LDB_DI0_VS_POL_ACT_LOW BIT(9)32#define LDB_DI1_VS_POL_ACT_LOW BIT(10)3334#define MAX_LDB_CHAN_NUM 23536enum ldb_channel_link_type {37LDB_CH_SINGLE_LINK,38LDB_CH_DUAL_LINK_EVEN_ODD_PIXELS,39LDB_CH_DUAL_LINK_ODD_EVEN_PIXELS,40};4142struct ldb;4344struct ldb_channel {45struct ldb *ldb;46struct drm_bridge bridge;47struct drm_bridge *next_bridge;48struct device_node *np;49u32 chno;50bool is_available;51u32 in_bus_format;52u32 out_bus_format;53enum ldb_channel_link_type link_type;54};5556struct ldb {57struct regmap *regmap;58struct device *dev;59struct ldb_channel *channel[MAX_LDB_CHAN_NUM];60unsigned int ctrl_reg;61u32 ldb_ctrl;62unsigned int available_ch_cnt;63};6465#define bridge_to_ldb_ch(b) container_of(b, struct ldb_channel, bridge)6667bool ldb_channel_is_single_link(struct ldb_channel *ldb_ch);68bool ldb_channel_is_split_link(struct ldb_channel *ldb_ch);6970int ldb_bridge_atomic_check_helper(struct drm_bridge *bridge,71struct drm_bridge_state *bridge_state,72struct drm_crtc_state *crtc_state,73struct drm_connector_state *conn_state);7475void ldb_bridge_mode_set_helper(struct drm_bridge *bridge,76const struct drm_display_mode *mode,77const struct drm_display_mode *adjusted_mode);7879void ldb_bridge_enable_helper(struct drm_bridge *bridge);8081void ldb_bridge_disable_helper(struct drm_bridge *bridge);8283int ldb_bridge_attach_helper(struct drm_bridge *bridge, struct drm_encoder *encoder,84enum drm_bridge_attach_flags flags);8586int ldb_init_helper(struct ldb *ldb);8788int ldb_find_next_bridge_helper(struct ldb *ldb);8990void ldb_add_bridge_helper(struct ldb *ldb);9192void ldb_remove_bridge_helper(struct ldb *ldb);9394#endif /* __IMX_LDB_HELPER__ */959697