114 lines
3.1 KiB
C
114 lines
3.1 KiB
C
/*
|
|
* 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_read)(struct mipi_dsi_info *mipi,
|
|
u8 data_type, u32 *buf, int len);
|
|
int (*mipi_dsi_pkt_write)(struct mipi_dsi_info *mipi_dsi,
|
|
u8 data_type, const 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
|