Ejemplo n.º 1
0
static int mapphone_panel_probe(struct omap_dss_device *dssdev)
{
	int pixel_size = 24;
	struct mapphone_data *data;
	struct omap_panel_device panel_dev;

	DBG("probe\n");

	if (mapphone_panel_dt_panel_probe(&pixel_size))
		printk(KERN_INFO "panel: using non-dt configuration\n");

	panel_print_dt();
	dssdev->ctrl.pixel_size = pixel_size;
	dssdev->panel.config = OMAP_DSS_LCD_TFT;
	dssdev->panel.timings = mapphone_panel_timings;

	data = kmalloc(sizeof(struct mapphone_data), GFP_KERNEL);
	if (!data)
		return -ENOMEM;

	memset(data, 0, sizeof(data));

	strncpy(panel_dev.name, dssdev->name, OMAP_PANEL_MAX_NAME_SIZE);
	panel_dev.fod_disable = mapphone_panel_disable_local;
	panel_dev.dssdev = dssdev;
	data->panel_handle = omap_panel_register(&panel_dev);
	if (data->panel_handle == NULL) {
		printk(KERN_ERR "Panel Register Failed\n");
		kfree(data);
		data = NULL;
		return -ENODEV;
	}

	INIT_WORK(&data->work, mapphone_panel_display_on);
	init_waitqueue_head(&data->wait);
#ifdef CONFIG_FB_OMAP2_MTD_LOGO
	atomic_set(&data->state, PANEL_OFF);
#else
	atomic_set(&data->state, PANEL_ON);
#endif
	data->dssdev = dssdev;
	dssdev->data = data;

	return 0;
}
static int __init mapphone_dt_panel_init(void)
{
	int ret = 0;

	PANELDBG("dt_panel_init\n");

	if (mapphone_panel_device_read_dt == false) {
		if (mapphone_dt_get_feature_info() != 0) {
			PANELERR("failed to parse feature info\n");
			ret = -ENODEV;
		} else if (mapphone_dt_get_dsi_panel_info() != 0) {
			PANELERR("failed to parse DSI panel info\n");
			ret = -ENODEV;
		} else if ((mapphone_lcd_device.phy.dsi.type ==
						OMAP_DSS_DSI_TYPE_VIDEO_MODE) &&
				(mapphone_dt_get_dsi_vm_info() != 0)) {
			PANELERR("failed to parse DSI VM info\n");
			ret = -ENODEV;
		} else if ((mapphone_lcd_device.phy.dsi.type ==
						OMAP_DSS_DSI_TYPE_VIDEO_MODE) &&
				(mapphone_lcd_device.panel.panel_id ==
					MOT_DISP_LVDS_MIPI_VM_1007_1280_800) &&
				(mapphone_dt_get_lvds_panel_info() != 0)) {
			PANELERR("failed to parse DSI lvds panel info\n");
			ret = -ENODEV;
		} else if (mapphone_dt_get_panel_info() != 0) {
			PANELERR("failed to parse panel info\n");
			ret = -ENODEV;
		} else if (mapphone_dt_get_panel_feature() != 0) {
			PANELERR("failed to parse panel feature info\n");
			ret = -ENODEV;
		} else if (mapphone_feature_hdmi &&
				mapphone_dt_get_hdtv_info() != 0) {
			PANELERR("failed to parse hdtv info\n");
			ret = -ENODEV;
		} else {
			mapphone_panel_device_read_dt = true;
		}
	}

	panel_print_dt();
	return ret;
}
Ejemplo n.º 3
0
static int mapphone_panel_probe(struct omap_dss_device *dssdev)
{
	int error;
	int pixel_size = 24;
	struct mapphone_data *data;
	struct omap_panel_device panel_dev;

	DBG("probe\n");

	data = kmalloc(sizeof(struct mapphone_data), GFP_KERNEL);
	if (!data)
		return -ENOMEM;

	memset(data, 0, sizeof(data));

	data->te_scan_line = 0x300;  /* default value for WVGA display */
	data->dssdev = dssdev;
	dssdev->data = data;

	if (mapphone_panel_dt_panel_probe(dssdev, &pixel_size))
		printk(KERN_INFO "panel: using non-dt configuration\n");

	panel_print_dt(dssdev);
	dssdev->ctrl.pixel_size = pixel_size;
	dssdev->panel.config = OMAP_DSS_LCD_TFT;
	dssdev->panel.timings = mapphone_panel_timings;

	strncpy(panel_dev.name, dssdev->name, OMAP_PANEL_MAX_NAME_SIZE);
	panel_dev.fod_disable = mapphone_panel_disable_local;
	panel_dev.dssdev = dssdev;
	data->panel_handle = omap_panel_register(&panel_dev);
	if (data->panel_handle == NULL) {
		printk(KERN_ERR "Panel Register Failed\n");
		goto freedata;
	}

	error = device_create_file(&panel_dev.dssdev->dev,
		&dev_attr_supplier_id);
	if (error < 0) {
		pr_err("%s: device supplier_id create failed: %d\n",
			__func__, error);
		goto unregister;
	}

	error = device_create_file(&panel_dev.dssdev->dev,
		&dev_attr_supplier_name);
	if (error < 0) {
		pr_err("%s: device supplier_name create failed: %d\n",
			__func__, error);
		goto removeattr;
	}

	atomic_set(&data->state, PANEL_OFF);

	return 0;

removeattr:
	device_remove_file(&panel_dev.dssdev->dev, &dev_attr_supplier_id);
unregister:
	omap_panel_unregister(data->panel_handle);
freedata:
	kfree(data);
	data = NULL;

	return -ENODEV;
}