brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · a0a5cde Raw
97 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2 3/*4 * Copyright 2019,2020,2022 NXP5 */6 7#ifndef __IMX_LDB_HELPER__8#define __IMX_LDB_HELPER__9 10#include <linux/device.h>11#include <linux/kernel.h>12#include <linux/of.h>13#include <linux/regmap.h>14 15#include <drm/drm_atomic.h>16#include <drm/drm_bridge.h>17#include <drm/drm_device.h>18#include <drm/drm_encoder.h>19#include <drm/drm_modeset_helper_vtables.h>20 21#define LDB_CH0_MODE_EN_TO_DI0		BIT(0)22#define LDB_CH0_MODE_EN_TO_DI1		(3 << 0)23#define LDB_CH0_MODE_EN_MASK		(3 << 0)24#define LDB_CH1_MODE_EN_TO_DI0		BIT(2)25#define LDB_CH1_MODE_EN_TO_DI1		(3 << 2)26#define LDB_CH1_MODE_EN_MASK		(3 << 2)27#define LDB_SPLIT_MODE_EN		BIT(4)28#define LDB_DATA_WIDTH_CH0_24		BIT(5)29#define LDB_BIT_MAP_CH0_JEIDA		BIT(6)30#define LDB_DATA_WIDTH_CH1_24		BIT(7)31#define LDB_BIT_MAP_CH1_JEIDA		BIT(8)32#define LDB_DI0_VS_POL_ACT_LOW		BIT(9)33#define LDB_DI1_VS_POL_ACT_LOW		BIT(10)34 35#define MAX_LDB_CHAN_NUM		236 37enum ldb_channel_link_type {38	LDB_CH_SINGLE_LINK,39	LDB_CH_DUAL_LINK_EVEN_ODD_PIXELS,40	LDB_CH_DUAL_LINK_ODD_EVEN_PIXELS,41};42 43struct ldb;44 45struct ldb_channel {46	struct ldb *ldb;47	struct drm_bridge bridge;48	struct drm_bridge *next_bridge;49	struct device_node *np;50	u32 chno;51	bool is_available;52	u32 in_bus_format;53	u32 out_bus_format;54	enum ldb_channel_link_type link_type;55};56 57struct ldb {58	struct regmap *regmap;59	struct device *dev;60	struct ldb_channel *channel[MAX_LDB_CHAN_NUM];61	unsigned int ctrl_reg;62	u32 ldb_ctrl;63	unsigned int available_ch_cnt;64};65 66#define bridge_to_ldb_ch(b)	container_of(b, struct ldb_channel, bridge)67 68bool ldb_channel_is_single_link(struct ldb_channel *ldb_ch);69bool ldb_channel_is_split_link(struct ldb_channel *ldb_ch);70 71int ldb_bridge_atomic_check_helper(struct drm_bridge *bridge,72				   struct drm_bridge_state *bridge_state,73				   struct drm_crtc_state *crtc_state,74				   struct drm_connector_state *conn_state);75 76void ldb_bridge_mode_set_helper(struct drm_bridge *bridge,77				const struct drm_display_mode *mode,78				const struct drm_display_mode *adjusted_mode);79 80void ldb_bridge_enable_helper(struct drm_bridge *bridge);81 82void ldb_bridge_disable_helper(struct drm_bridge *bridge);83 84int ldb_bridge_attach_helper(struct drm_bridge *bridge,85			     enum drm_bridge_attach_flags flags);86 87int ldb_init_helper(struct ldb *ldb);88 89int ldb_find_next_bridge_helper(struct ldb *ldb);90 91void ldb_add_bridge_helper(struct ldb *ldb,92			   const struct drm_bridge_funcs *bridge_funcs);93 94void ldb_remove_bridge_helper(struct ldb *ldb);95 96#endif /* __IMX_LDB_HELPER__ */97