|  | /* | 
|  | * Copyright (C) 2011-2014 Freescale Semiconductor, Inc. All Rights Reserved. | 
|  | * | 
|  | * This program is free software; you can redistribute it and/or modify | 
|  | * it under the terms of the GNU General Public License as published by | 
|  | * the Free Software Foundation; either version 2 of the License, or | 
|  | * (at your option) any later version. | 
|  |  | 
|  | * This program is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | * GNU General Public License for more details. | 
|  |  | 
|  | * You should have received a copy of the GNU General Public License along | 
|  | * with this program; if not, write to the Free Software Foundation, Inc., | 
|  | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 
|  | */ | 
|  |  | 
|  | #ifndef __MIPI_DSI_H__ | 
|  | #define __MIPI_DSI_H__ | 
|  |  | 
|  | #include <linux/regmap.h> | 
|  | #include "mxc_dispdrv.h" | 
|  |  | 
|  | #ifdef DEBUG | 
|  | #define mipi_dbg(fmt, ...) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) | 
|  | #else | 
|  | #define mipi_dbg(fmt, ...) | 
|  | #endif | 
|  |  | 
|  | #define	DSI_CMD_BUF_MAXSIZE         (32) | 
|  |  | 
|  | /* DPI interface pixel color coding map */ | 
|  | enum mipi_dsi_dpi_fmt { | 
|  | MIPI_RGB565_PACKED = 0, | 
|  | MIPI_RGB565_LOOSELY, | 
|  | MIPI_RGB565_CONFIG3, | 
|  | MIPI_RGB666_PACKED, | 
|  | MIPI_RGB666_LOOSELY, | 
|  | MIPI_RGB888, | 
|  | }; | 
|  |  | 
|  | struct mipi_lcd_config { | 
|  | u32				virtual_ch; | 
|  | u32				data_lane_num; | 
|  | /* device max DPHY clock in MHz unit */ | 
|  | u32				max_phy_clk; | 
|  | enum mipi_dsi_dpi_fmt		dpi_fmt; | 
|  | }; | 
|  |  | 
|  | struct mipi_dsi_info; | 
|  | struct mipi_dsi_lcd_callback { | 
|  | /* callback for lcd panel operation */ | 
|  | void (*get_mipi_lcd_videomode)(struct fb_videomode **, int *, | 
|  | struct mipi_lcd_config **); | 
|  | int  (*mipi_lcd_setup)(struct mipi_dsi_info *); | 
|  |  | 
|  | }; | 
|  |  | 
|  | struct mipi_dsi_match_lcd { | 
|  | char *lcd_panel; | 
|  | struct mipi_dsi_lcd_callback lcd_callback; | 
|  | }; | 
|  |  | 
|  | struct mipi_dsi_bus_mux { | 
|  | int reg; | 
|  | int mask; | 
|  | int (*get_mux) (int dev_id, int disp_id); | 
|  | }; | 
|  |  | 
|  | /* driver private data */ | 
|  | struct mipi_dsi_info { | 
|  | struct platform_device		*pdev; | 
|  | void __iomem			*mmio_base; | 
|  | struct regmap			*regmap; | 
|  | const struct mipi_dsi_bus_mux	*bus_mux; | 
|  | int				dsi_power_on; | 
|  | int				lcd_inited; | 
|  | u32				dphy_pll_config; | 
|  | int				dev_id; | 
|  | int				disp_id; | 
|  | char				*lcd_panel; | 
|  | int				irq; | 
|  | struct clk			*dphy_clk; | 
|  | struct clk			*cfg_clk; | 
|  | struct mxc_dispdrv_handle	*disp_mipi; | 
|  | struct  fb_videomode		*mode; | 
|  | struct regulator		*disp_power_on; | 
|  | struct  mipi_lcd_config		*lcd_config; | 
|  | /* board related power control */ | 
|  | struct backlight_device		*bl; | 
|  | /* callback for lcd panel operation */ | 
|  | struct mipi_dsi_lcd_callback	*lcd_callback; | 
|  | }; | 
|  |  | 
|  | int mipi_dsi_pkt_write(struct mipi_dsi_info *mipi, | 
|  | u8 data_type, const u32 *buf, int len); | 
|  | int mipi_dsi_pkt_read(struct mipi_dsi_info *mipi, | 
|  | u8 data_type, u32 *buf, int len); | 
|  | int mipi_dsi_dcs_cmd(struct mipi_dsi_info *mipi, | 
|  | u8 cmd, const u32 *param, int num); | 
|  |  | 
|  | #ifdef CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL | 
|  | void mipid_hx8369_get_lcd_videomode(struct fb_videomode **mode, int *size, | 
|  | struct mipi_lcd_config **data); | 
|  | int mipid_hx8369_lcd_setup(struct mipi_dsi_info *); | 
|  | #endif | 
|  |  | 
|  | #ifndef CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL | 
|  | #error "Please configure MIPI LCD panel, we cannot find one!" | 
|  | #endif | 
|  |  | 
|  | #endif |