*
* @ingroup IPU
*/
-#define DEBUG
#include <linux/types.h>
#include <linux/init.h>
#include <linux/platform_device.h>
};
int __initdata primary_di = { 0 };
-static int __init di_setup(char *__unused)
+static int __init di1_setup(char *__unused)
{
- primary_di = 1;
+ primary_di = MXC_PRI_DI1;
return 1;
}
-__setup("di1_primary", di_setup);
+__setup("di1_primary", di1_setup);
+
+static int __init di0_setup(char *__unused)
+{
+ primary_di = MXC_PRI_DI0;
+ return 1;
+}
+__setup("di0_primary", di0_setup);
struct platform_device *__init imx_add_ipuv3_fb(
const struct ipuv3_fb_platform_data *pdata, int id)
{
struct imx_ipuv3_platform_data *plat_data = pdev->dev.platform_data;
- if (primary_di) {
+ if (!primary_di)
+ primary_di = plat_data->primary_di;
+
+ if (primary_di == MXC_PRI_DI1) {
dev_info(g_ipu_dev, "DI1 is primary\n");
/* DI1 -> DP-BG channel: */
imx_add_ipuv3_fb(plat_data->fb_head1_platform_data, 1);
static u32 *ldb_reg;
static int g_chan_mode_opt = LDB_NO_MODE;
static int g_chan_bit_map[2];
-static bool g_enable_ldb;
+#define MXC_ENABLE 1
+#define MXC_DISABLE 2
+static int g_enable_ldb;
static bool g_di0_used;
static bool g_di1_used;
int mxc_ldb_major;
struct class *mxc_ldb_class;
- if (g_enable_ldb == false)
- return -ENODEV;
+ if ((plat_data->boot_enable & (MXC_LDBDI0 | MXC_LDBDI1))
+ && !g_enable_ldb) {
+ g_enable_ldb = MXC_ENABLE;
+ if (plat_data->boot_enable & MXC_LDBDI0)
+ g_di0_used = true;
+ if (plat_data->boot_enable & MXC_LDBDI1)
+ g_di1_used = true;
+ }
+
+ if (!g_enable_ldb)
+ g_enable_ldb = MXC_DISABLE;
+
+ if (g_enable_ldb == MXC_DISABLE) {
+ printk(KERN_WARNING "By setting, LDB driver will not be enabled\n");
+ return 0;
+ }
spin_lock_init(&ldb_lock);
*/
static int __init ldb_setup(char *options)
{
- g_enable_ldb = true;
+ if (!strcmp(options, "=off")) {
+ g_enable_ldb = MXC_DISABLE;
+ return 1;
+ } else
+ g_enable_ldb = MXC_ENABLE;
if (!strlen(options))
return 1;
struct regulator *analog_reg;
} mxc_ddc;
-static bool g_enable_ddc;
+#define MXC_ENABLE 1
+#define MXC_DISABLE 2
+static int g_enable_ddc;
void mxc_edid_parse_ext_blk(unsigned char *edid,
struct mxc_edid_cfg *cfg,
struct fb_info edid_fbi;
struct fsl_mxc_ddc_platform_data *plat = client->dev.platform_data;
- if (g_enable_ddc == false)
- return -EPERM;
+ if (plat->boot_enable && !g_enable_ddc)
+ g_enable_ddc = MXC_ENABLE;
+ if (!g_enable_ddc)
+ g_enable_ddc = MXC_DISABLE;
+
+ if (g_enable_ddc == MXC_DISABLE) {
+ printk(KERN_WARNING "By setting, DDC driver will not be enabled\n");
+ return 0;
+ }
mxc_ddc.client = client;
mxc_ddc.di = plat->di;
static int __init enable_ddc_setup(char *options)
{
- g_enable_ddc = true;
+ if (!strcmp(options, "=off"))
+ g_enable_ddc = MXC_DISABLE;
+ else
+ g_enable_ddc = MXC_ENABLE;
return 1;
}
#define IPU_DISP_PORT 0
#define SII_EDID_LEN 256
-static bool g_enable_hdmi;
+#define MXC_ENABLE 1
+#define MXC_DISABLE 2
+static int g_enable_hdmi;
struct sii902x_data {
struct platform_device *pdev;
struct fsl_mxc_lcd_platform_data *plat = client->dev.platform_data;
struct fb_info edid_fbi;
- if (g_enable_hdmi == false)
- return -EPERM;
+ if (plat->boot_enable &&
+ !g_enable_hdmi)
+ g_enable_hdmi = MXC_ENABLE;
+ if (!g_enable_hdmi)
+ g_enable_hdmi = MXC_DISABLE;
+
+ if (g_enable_hdmi == MXC_DISABLE) {
+ printk(KERN_WARNING "By setting, SII driver will not be enabled\n");
+ return 0;
+ }
sii902x.client = client;
static int __init enable_hdmi_setup(char *options)
{
- g_enable_hdmi = true;
+ if (!strcmp(options, "=off"))
+ g_enable_hdmi = MXC_DISABLE;
+ else
+ g_enable_hdmi = MXC_ENABLE;
return 1;
}
DEFINE_SPINLOCK(tve_lock);
static struct fb_info *tve_fbi;
-static bool g_enable_tve;
-static bool g_enable_vga;
+#define MXC_ENABLE 1
+#define MXC_DISABLE 2
+static int g_enable_tve;
+static int g_enable_vga;
struct tve_data {
struct platform_device *pdev;
struct fsl_mxc_tve_platform_data *plat_data = pdev->dev.platform_data;
u32 conf_reg;
- if (g_enable_tve == false && g_enable_vga == false)
- return -EPERM;
+ /*
+ * tve/vga can be enabled by platform data when there is
+ * no setting from cmdline setup
+ */
+ if ((plat_data->boot_enable & MXC_TVE_TVOUT)
+ && !g_enable_tve)
+ g_enable_tve = MXC_ENABLE;
+ if (!g_enable_tve)
+ g_enable_tve = MXC_DISABLE;
+
+ if ((plat_data->boot_enable & MXC_TVE_VGA) &&
+ !g_enable_vga)
+ g_enable_vga = MXC_ENABLE;
+ if (!g_enable_vga)
+ g_enable_vga = MXC_DISABLE;
+
+ if (g_enable_tve == MXC_DISABLE &&
+ g_enable_vga == MXC_DISABLE) {
+ printk(KERN_WARNING "By setting, TVE driver will not be enabled\n");
+ return 0;
+ }
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res == NULL)
/* TVE is on disp port 1 */
if (tve.revision == 1) {
- if (g_enable_tve)
+ if (g_enable_tve == MXC_ENABLE)
mxcfb_register_mode(IPU_DISP_PORT, video_modes,
3, MXC_DISP_SPEC_DEV);
} else {
- if (g_enable_tve)
+ if (g_enable_tve == MXC_ENABLE)
mxcfb_register_mode(IPU_DISP_PORT, video_modes,
ARRAY_SIZE(video_modes),
MXC_DISP_SPEC_DEV);
- if (cpu_is_mx53() && g_enable_vga)
+ if (cpu_is_mx53() && (g_enable_vga == MXC_ENABLE))
mxcfb_register_mode(IPU_DISP_PORT, video_modes_vga,
ARRAY_SIZE(video_modes_vga),
MXC_DISP_SPEC_DEV);
static int __init enable_tve_setup(char *options)
{
- g_enable_tve = true;
+ if (!strcmp(options, "=off"))
+ g_enable_tve = MXC_DISABLE;
+ else
+ g_enable_tve = MXC_ENABLE;
return 1;
}
static int __init enable_vga_setup(char *options)
{
- g_enable_vga = true;
+ if (!strcmp(options, "=off"))
+ g_enable_vga = MXC_DISABLE;
+ else
+ g_enable_vga = MXC_ENABLE;
return 1;
}