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 Taostatic 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 Taostatic 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