xref: /openbmc/linux/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
25e0df3a0SRongrong Zou /* Hisilicon Hibmc SoC drm driver
35e0df3a0SRongrong Zou  *
45e0df3a0SRongrong Zou  * Based on the bochs drm driver.
55e0df3a0SRongrong Zou  *
65e0df3a0SRongrong Zou  * Copyright (c) 2016 Huawei Limited.
75e0df3a0SRongrong Zou  *
85e0df3a0SRongrong Zou  * Author:
95e0df3a0SRongrong Zou  *	Rongrong Zou <zourongrong@huawei.com>
105e0df3a0SRongrong Zou  *	Rongrong Zou <zourongrong@gmail.com>
115e0df3a0SRongrong Zou  *	Jianhua Li <lijianhua@huawei.com>
125e0df3a0SRongrong Zou  */
135e0df3a0SRongrong Zou 
145e0df3a0SRongrong Zou #ifndef HIBMC_DRM_DRV_H
155e0df3a0SRongrong Zou #define HIBMC_DRM_DRV_H
165e0df3a0SRongrong Zou 
174eb4d99dSTian Tao #include <linux/gpio/consumer.h>
184eb4d99dSTian Tao #include <linux/i2c-algo-bit.h>
194eb4d99dSTian Tao #include <linux/i2c.h>
204eb4d99dSTian Tao 
214eb4d99dSTian Tao #include <drm/drm_edid.h>
2240b4db43SSam Ravnborg #include <drm/drm_framebuffer.h>
2340b4db43SSam Ravnborg 
244eb4d99dSTian Tao struct hibmc_connector {
254eb4d99dSTian Tao 	struct drm_connector base;
264eb4d99dSTian Tao 
274eb4d99dSTian Tao 	struct i2c_adapter adapter;
284eb4d99dSTian Tao 	struct i2c_algo_bit_data bit_data;
294eb4d99dSTian Tao };
304eb4d99dSTian Tao 
315e0df3a0SRongrong Zou struct hibmc_drm_private {
325e0df3a0SRongrong Zou 	/* hw */
335e0df3a0SRongrong Zou 	void __iomem   *mmio;
345e0df3a0SRongrong Zou 
355e0df3a0SRongrong Zou 	/* drm */
36*770729f7STian Tao 	struct drm_device dev;
3713b0d4a9STian Tao 	struct drm_plane primary_plane;
3813b0d4a9STian Tao 	struct drm_crtc crtc;
39be8c8403STian Tao 	struct drm_encoder encoder;
404eb4d99dSTian Tao 	struct hibmc_connector connector;
415e0df3a0SRongrong Zou };
425e0df3a0SRongrong Zou 
to_hibmc_connector(struct drm_connector * connector)434eb4d99dSTian Tao static inline struct hibmc_connector *to_hibmc_connector(struct drm_connector *connector)
444eb4d99dSTian Tao {
454eb4d99dSTian Tao 	return container_of(connector, struct hibmc_connector, base);
464eb4d99dSTian Tao }
474eb4d99dSTian Tao 
to_hibmc_drm_private(struct drm_device * dev)484eb4d99dSTian Tao static inline struct hibmc_drm_private *to_hibmc_drm_private(struct drm_device *dev)
494eb4d99dSTian Tao {
50*770729f7STian Tao 	return container_of(dev, struct hibmc_drm_private, dev);
514eb4d99dSTian Tao }
524eb4d99dSTian Tao 
535e0df3a0SRongrong Zou void hibmc_set_power_mode(struct hibmc_drm_private *priv,
545fefd250STian Tao 			  u32 power_mode);
555e0df3a0SRongrong Zou void hibmc_set_current_gate(struct hibmc_drm_private *priv,
565fefd250STian Tao 			    u32 gate);
575e0df3a0SRongrong Zou 
58da52605eSRongrong Zou int hibmc_de_init(struct hibmc_drm_private *priv);
595294967fSRongrong Zou int hibmc_vdac_init(struct hibmc_drm_private *priv);
60d1667b86SRongrong Zou 
61e4daebc7SRongrong Zou int hibmc_mm_init(struct hibmc_drm_private *hibmc);
624eb4d99dSTian Tao int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_connector *connector);
63e4daebc7SRongrong Zou 
645e0df3a0SRongrong Zou #endif
65