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; }
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; }