static int mapphone_panel_enable_hdtv(struct omap_dss_device *dssdev) { int rc = 0; PANELDBG("mapphone_panel_enable_hdtv\n"); if (!mapphone_hdmi_dac_reg) { if (mapphone_hdmi_dac_reg_name[0] == 0) { PANELERR("No HDMI regulator defined\n"); rc = -1; goto exit; } mapphone_hdmi_dac_reg = regulator_get(NULL, mapphone_hdmi_dac_reg_name); if (IS_ERR(mapphone_hdmi_dac_reg)) { PANELERR("Failed HDMI regulator_get\n"); rc = -1; goto exit; } } rc = regulator_enable(mapphone_hdmi_dac_reg); if (rc != 0) { PANELERR("Failed HDMI regulator_enable (%d)\n", rc); } else { PANELDBG("Enabled HDMI DAC regulator\n"); /* Settling time */ msleep(2); } exit: return rc; }
static int mapphone_dt_get_hdtv_info(void) { struct device_node *panel_node; const void *panel_prop; struct omap_ovl2mgr_mapping *read_ovl2mgr_mapping = NULL; int len = 0, i = 0; PANELDBG("dt_get_hdtv_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY2); if (panel_node == NULL) return -ENODEV; panel_prop = of_get_property(panel_node, "max_width", NULL); if (panel_prop != NULL) mapphone_hdtv_device.panel.timings.x_res = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "max_height", NULL); if (panel_prop != NULL) mapphone_hdtv_device.panel.timings.y_res = *(u32 *)panel_prop; if (mapphone_hdtv_device.panel.timings.x_res > 2048) mapphone_hdtv_device.panel.timings.x_res = 1920; if (mapphone_hdtv_device.panel.timings.y_res > 2048) mapphone_hdtv_device.panel.timings.x_res = 1080; PANELDBG("Getting the xres = %u yres = %u\n", mapphone_hdtv_device.panel.timings.x_res, mapphone_hdtv_device.panel.timings.y_res); panel_prop = of_get_property(panel_node, "gpio_pwr_en", NULL); if (panel_prop != NULL) { hpd_en_config.gpio = *(u32 *)panel_prop; platform_add_devices(hdmi_regulator_devices, ARRAY_SIZE(hdmi_regulator_devices)); } else { PANELDBG("Getting the property gpio_pwr_en failed"); } panel_prop = of_get_property(panel_node, "dac_reg_name", NULL); if (panel_prop != NULL) { strncpy(mapphone_hdmi_dac_reg_name, (char *)panel_prop, (HDMI_DAC_REGULATOR_NAME_SIZE)); mapphone_hdmi_dac_reg_name \ [HDMI_DAC_REGULATOR_NAME_SIZE] = '\0'; } of_node_put(panel_node); return 0; }
static int mapphone_panel_regulator_enable(void) { int i; struct mapphone_dsi_panel_pwr_supply *supply; struct mapphone_dsi_panel_data *panel_data = (struct mapphone_dsi_panel_data *)mapphone_lcd_device.data; if (!panel_data->num_pwr_supply) PANELWARN("No display regulator is requested\n"); if (first_boot) { for (i = 0; i < panel_data->num_pwr_supply; i++) { supply = &(panel_data->disp_vol_supply[i]); if (supply->name[0] == '\0') { PANELDBG("Display power supply[%d] = none\n", i); supply->reg_handle = NULL; continue; } PANELDBG("Display power supply[%d] = %s\n", i, supply->name); supply->reg_handle = regulator_get(NULL, supply->name); if (IS_ERR(supply->reg_handle)) { PANELERR("fail to get reg for displ.\n"); return PTR_ERR(supply->reg_handle); } } } for (i = 0; i < panel_data->num_pwr_supply; i++) { supply = &(panel_data->disp_vol_supply[i]); if (supply->reg_handle) { PANELDBG("Display power supply[%d], regulator on\n", i); regulator_enable(supply->reg_handle); } if (supply->en_gpio != 0) { PANELDBG("Display power supply[%d], gpio %d set" "to %d \n", i, supply->en_gpio, supply->en_gpio_value); gpio_set_value(supply->en_gpio, supply->en_gpio_value); } } msleep(10); 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) { printk(KERN_ERR "failed to parse feature info\n"); ret = -ENODEV; } else if (mapphone_dt_get_dsi_panel_info() != 0) { printk(KERN_ERR "failed to parse DSI panel info\n"); ret = -ENODEV; } else if ((mapphone_lcd_device.phy.dsi.xfer_mode == OMAP_DSI_XFER_VIDEO_MODE) && (mapphone_dt_get_dsi_vm_info() != 0)) { printk(KERN_ERR "failed to parse DSI VM info\n"); ret = -ENODEV; } else if (mapphone_dt_get_panel_info() != 0) { printk(KERN_ERR "failed to parse panel info\n"); ret = -ENODEV; } else if (mapphone_feature_hdmi && mapphone_dt_get_hdtv_info() != 0) { printk(KERN_ERR "failed to parse hdtv info\n"); ret = -ENODEV; } else { mapphone_panel_device_read_dt = true; } } return ret; }
static void mapphone_panel_disable_hpd_hdtv(struct omap_dss_device *dssdev) { PANELDBG("mapphone_panel_disable_hpd_hdtv\n"); mapphone_hdmi_platform_hpd_en = 0; mapphone_panel_hdmi_5v_disable(); }
static void mapphone_panel_disable_hdtv(struct omap_dss_device *dssdev) { PANELDBG("mapphone_panel_disable_hdtv\n"); if (mapphone_hdmi_dac_reg) regulator_disable(mapphone_hdmi_dac_reg); }
static int mapphone_dt_get_panel_feature(void) { struct device_node *panel_node; const void *panel_prop; struct mapphone_dsi_panel_data *panel_data = (struct mapphone_dsi_panel_data *)mapphone_lcd_device.data; int r = 0; PANELDBG("mapphone_dt_get_panel_feature()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node == NULL) { r = -ENODEV; goto err; } /* Retrieve which features are supported */ panel_prop = of_get_property(panel_node, "ftr_support_som", NULL); if (panel_prop != NULL) panel_data->ftr_support.som = *(bool *)panel_prop; end: of_node_put(panel_node); err: return r; }
static int mapphone_dt_get_lvds_panel_info(void) { struct device_node *panel_node; const void *panel_prop; struct mapphone_dsi_panel_data *panel_data = (struct mapphone_dsi_panel_data *)mapphone_lcd_device.data; PANELDBG("mapphone_dt_get_lvds_panel_info\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node == NULL) return -ENODEV; panel_prop = of_get_property(panel_node, "lvds_panel_timing_hbpr", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.hbpr = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_panel_timing_hpw", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.hpw = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_panel_timing_hfpr", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.hfpr = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_panel_timing_vbpr", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.vbpr = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_panel_timing_vspr", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.vspr = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_panel_timing_vfpr", NULL); if (panel_prop != NULL) panel_data->lvds_panel_timing.vfpr = *(u16 *)panel_prop; of_node_put(panel_node); PANELDBG("DT: lvds_panel_timing: hbpr=%d hpw=%d \ hfpr=%d vbpr=%d vspr=%d vfpr=%d\n", panel_data->lvds_panel_timing.hbpr, panel_data->lvds_panel_timing.hpw, panel_data->lvds_panel_timing.hfpr, panel_data->lvds_panel_timing.vbpr, panel_data->lvds_panel_timing.vspr, panel_data->lvds_panel_timing.vfpr); return 0; }
static void mapphone_panel_disable_hpd_hdtv(struct omap_dss_device *dssdev) { PANELDBG("mapphone_panel_disable_hpd_hdtv\n"); mapphone_hdmi_platform_hpd_en = 0; if (mapphone_hdmi_5v_enable) gpio_set_value(mapphone_hdmi_5v_enable, 0); }
static int mapphone_panel_enable_hpd_hdtv(struct omap_dss_device *dssdev) { int rc = 0; PANELDBG("mapphone_panel_enable_hpd_hdtv\n"); mapphone_hdmi_platform_hpd_en = 1; if (mapphone_hdmi_5v_enable && !mapphone_hdmi_5v_force_off) gpio_set_value(mapphone_hdmi_5v_enable, 1); return rc; }
static int mapphone_panel_enable_hpd_hdtv(struct omap_dss_device *dssdev) { int rc = 0; PANELDBG("mapphone_panel_enable_hpd_hdtv\n"); /* Only enable if not currently enabled */ if (mapphone_hdmi_platform_hpd_en == 0) { mapphone_hdmi_platform_hpd_en = 1; rc = mapphone_panel_hdmi_5v_enable(); } return rc; }
static int mapphone_dt_get_dsi_vm_info(void) { struct device_node *panel_node; const void *panel_prop; PANELDBG("dt_get_dsi_vm_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node == NULL) return -ENODEV; panel_prop = of_get_property(panel_node, "dsi_timing_hsa", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.hsa = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_timing_hfp", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.hfp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_timing_hbp", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.hbp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_timing_vsa", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.vsa = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_timing_vfp", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.vfp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_timing_vbp", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.vm_timing.vbp = *(u16 *)panel_prop; of_node_put(panel_node); PANELDBG("DT: phy.dsi.vm_timing: hsa=%d hfp=%d \ hbp=%d vsa=%d vfp=%d vbp=%d\n", mapphone_lcd_device.phy.dsi.vm_timing.hsa, mapphone_lcd_device.phy.dsi.vm_timing.hfp, mapphone_lcd_device.phy.dsi.vm_timing.hbp, mapphone_lcd_device.phy.dsi.vm_timing.vsa, mapphone_lcd_device.phy.dsi.vm_timing.vfp, mapphone_lcd_device.phy.dsi.vm_timing.vbp); return 0; }
static int mapphone_panel_hdmi_5v_disable(void) { int rc = 0; if (mapphone_hdmi_5v_enable) { rc = regulator_disable(mapphone_hdmi_5v_reg); if (rc != 0) { PANELERR("Failed HDMI_5V regulator_disable (%d)\n", rc); } else { PANELDBG("Disabled HDMI_5V regulator\n"); mapphone_hdmi_5v_enable = 0; } } return rc; }
static void mapphone_panel_regulator_disable(void) { int i; struct mapphone_dsi_panel_pwr_supply *supply; struct mapphone_dsi_panel_data *panel_data = (struct mapphone_dsi_panel_data *)mapphone_lcd_device.data; for (i = 0; i < panel_data->num_pwr_supply; i++) { supply = &(panel_data->disp_vol_supply[i]); if (supply->en_gpio != 0) { PANELDBG("Display power supply[%d], " "gpio %d set to %d\n", i, supply->en_gpio, !supply->en_gpio_value); gpio_set_value(supply->en_gpio, !supply->en_gpio_value); } if (supply->reg_handle) { PANELDBG("Display power supply[%d], " "regulator off\n", i); regulator_disable(supply->reg_handle); } } }
static int mapphone_dt_get_feature_info(void) { struct device_node *panel_node; const void *panel_prop; PANELDBG("dt_get_feature_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_HIGH_LEVEL_FEATURE); if (panel_node == NULL) return -ENODEV; panel_prop = of_get_property(panel_node, "feature_hdmi", NULL); if (panel_prop != NULL) mapphone_feature_hdmi = *(u8 *)panel_prop; 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_regulator_enable(void) { if (!display_regulator) { PANELDBG("Display power supply = %s\n", mapphone_displ_pwr_sup); display_regulator = regulator_get(NULL, mapphone_displ_pwr_sup); if (IS_ERR(display_regulator)) { printk(KERN_ERR "fail to get regulator for displ.\n"); return PTR_ERR(display_regulator); } } regulator_enable(display_regulator); if (mapphone_displ_pwr_sup_en != 0) { gpio_set_value(mapphone_displ_pwr_sup_en, 1); msleep(10); } return 0; }
static int mapphone_panel_hdmi_5v_enable(void) { int rc = -1; if (!mapphone_hdmi_5v_enable && !mapphone_hdmi_5v_force_off) { if (!mapphone_hdmi_5v_reg) { mapphone_hdmi_5v_reg = regulator_get(NULL, "hdmi_5V_en"); if (!mapphone_hdmi_5v_reg) { regulator_put(mapphone_hdmi_5v_reg); return rc; } } rc = regulator_enable(mapphone_hdmi_5v_reg); if (rc != 0) { PANELERR("Failed HDMI_5V regulator_enable (%d)\n", rc); } else { PANELDBG("Enabled HDMI_5V regulator\n"); mapphone_hdmi_5v_enable = 1; } } return rc; }
static int mapphone_dt_get_hdtv_info(void) { struct device_node *panel_node; const void *panel_prop; struct omap_ovl2mgr_mapping *read_ovl2mgr_mapping = NULL; int len = 0, i = 0; PANELDBG("dt_get_hdtv_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY2); if (panel_node == NULL) return -ENODEV; panel_prop = of_get_property(panel_node, "max_width", NULL); if (panel_prop != NULL) mapphone_hdtv_device.panel.timings.x_res = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "max_height", NULL); if (panel_prop != NULL) mapphone_hdtv_device.panel.timings.y_res = *(u32 *)panel_prop; if (mapphone_hdtv_device.panel.timings.x_res > 2048) mapphone_hdtv_device.panel.timings.x_res = 1920; if (mapphone_hdtv_device.panel.timings.y_res > 2048) mapphone_hdtv_device.panel.timings.x_res = 1080; /* Get the mapping data for the overlay to map to its manager*/ panel_prop = of_get_property(panel_node, "overlay_mgr_mapping", &len); mapphone_dss_data.ovl2mgr_mapping_cnt = 0; if (len) mapphone_dss_data.ovl2mgr_mapping_cnt = len / sizeof(struct omap_ovl2mgr_mapping); if (panel_prop != NULL) { read_ovl2mgr_mapping = (struct omap_ovl2mgr_mapping *)panel_prop; for (i = 0; i < mapphone_dss_data.ovl2mgr_mapping_cnt; i++) { mapphone_dss_data.ovl2mgr_mapping[i].overlay_idx = read_ovl2mgr_mapping[i].overlay_idx; mapphone_dss_data.ovl2mgr_mapping[i].overlay_mgr = read_ovl2mgr_mapping[i].overlay_mgr; PANELDBG("Mapping data for overlay %u" " is to manager %u\n", mapphone_dss_data.ovl2mgr_mapping[i].overlay_idx, mapphone_dss_data.ovl2mgr_mapping[i].overlay_mgr); } } else { PANELDBG("Panel property is 0 for ovl to mgr mapping\n"); } PANELDBG("Getting the xres = %u yres = %u\n", mapphone_hdtv_device.panel.timings.x_res, mapphone_hdtv_device.panel.timings.y_res); panel_prop = of_get_property(panel_node, "gpio_pwr_en", NULL); if (panel_prop != NULL) mapphone_hdmi_5v_enable = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "dac_reg_name", NULL); if (panel_prop != NULL) { strncpy(mapphone_hdmi_dac_reg_name, (char *)panel_prop, (HDMI_DAC_REGULATOR_NAME_SIZE)); mapphone_hdmi_dac_reg_name \ [HDMI_DAC_REGULATOR_NAME_SIZE] = '\0'; } of_node_put(panel_node); return 0; }
static int mapphone_dt_get_panel_info(void) { struct device_node *panel_node; const void *panel_prop; int panel_pixel_fmt; int pixel_size = 24; struct mapphone_dsi_panel_data *panel_data = (struct mapphone_dsi_panel_data *)mapphone_lcd_device.data; PANELDBG("mapphone_dt_get_panel_info\n"); panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node != NULL) { /* Retrieve the panel DSI timing */ panel_prop = of_get_property(panel_node, "width", NULL); if (panel_prop != NULL) mapphone_panel_timings.x_res = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "height", NULL); if (panel_prop != NULL) mapphone_panel_timings.y_res = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_hfp", NULL); if (panel_prop != NULL) mapphone_panel_timings.hfp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_hsw", NULL); if (panel_prop != NULL) mapphone_panel_timings.hsw = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_hbp", NULL); if (panel_prop != NULL) mapphone_panel_timings.hbp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_vfp", NULL); if (panel_prop != NULL) mapphone_panel_timings.vfp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_vsw", NULL); if (panel_prop != NULL) mapphone_panel_timings.vsw = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "dispc_timing_vbp", NULL); if (panel_prop != NULL) mapphone_panel_timings.vbp = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "phy_width_mm", NULL); if (panel_prop != NULL) mapphone_panel_timings.w = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "phy_height_mm", NULL); if (panel_prop != NULL) mapphone_panel_timings.h = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "te_support", NULL); if (panel_prop != NULL) panel_data->te_support = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "te_scan_line", NULL); if (panel_prop != NULL) panel_data->te_scan_line = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "te_type", NULL); if (panel_prop != NULL) panel_data->te_type = *(enum omap_dsi_te_type *) panel_prop; panel_prop = of_get_property(panel_node, "pixel_fmt", NULL); if (panel_prop != NULL) { panel_pixel_fmt = *(u32 *)panel_prop; if (panel_pixel_fmt == OMAP_DSS_DISP_PXL_FMT_RGB888) pixel_size = 24; else if (panel_pixel_fmt == OMAP_DSS_DISP_PXL_FMT_RGB565) pixel_size = 16; else { printk(KERN_ERR " Invalid panel_pxl_fmt=%d", panel_pixel_fmt); return -ENODEV; } } of_node_put(panel_node); mapphone_lcd_device.ctrl.pixel_size = pixel_size; mapphone_lcd_device.panel.timings = mapphone_panel_timings; } return panel_node ? 0 : -ENODEV; }
static int mapphone_dt_get_dsi_panel_info(void) { struct device_node *panel_node; const void *panel_prop; int disp_intf; int len = 0; PANELDBG("dt_get_dsi_panel_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node == NULL) return -ENODEV; /* Retrieve the panel information */ panel_prop = of_get_property(panel_node, "dsi_clk_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.clk_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_clk_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.clk_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data1_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data1_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data1_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data1_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data2_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data2_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data2_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data2_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "gpio_reset", NULL); if (panel_prop != NULL) mapphone_panel_data.reset_gpio = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "displ_pwr_sup", &len); if ((panel_prop != NULL) && len) { strncpy(mapphone_displ_pwr_sup, (char *)panel_prop, sizeof(mapphone_displ_pwr_sup) - 1); mapphone_displ_pwr_sup[sizeof(mapphone_displ_pwr_sup) - 1] = '\0'; } panel_prop = of_get_property(panel_node, "displ_pwr_sup_en", NULL); if (panel_prop != NULL) mapphone_displ_pwr_sup_en = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "type", NULL); if (panel_prop != NULL) mapphone_lcd_device.panel.panel_id = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "regn", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.regn = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.regm = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm3", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.regm_dispc = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm4", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.regm_dsi = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lp_clk_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.lp_clk_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lck_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.lck_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "pck_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.div.pck_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "disp_intf", NULL); if (panel_prop != NULL) { disp_intf = *(u8 *)panel_prop; if ((disp_intf == OMAP_DSS_DISP_INTF_MIPI_VP_CM) || (disp_intf == OMAP_DSS_DISP_INTF_MIPI_L4_CM)) mapphone_lcd_device.phy.dsi.xfer_mode = OMAP_DSI_XFER_CMD_MODE; else if ((disp_intf == OMAP_DSS_DISP_INTF_MIPI_VP_VM) || (disp_intf == OMAP_DSS_DISP_INTF_MIPI_L4_VM)) mapphone_lcd_device.phy.dsi.xfer_mode = OMAP_DSI_XFER_VIDEO_MODE; else { printk(KERN_ERR "Invalid disp_intf in dt = %d\n", disp_intf); return -ENODEV; } } of_node_put(panel_node); return 0; }
static int mapphone_dt_get_dsi_panel_info(void) { struct device_node *panel_node; const void *panel_prop; int disp_intf, r = 0; PANELDBG("dt_get_dsi_panel_info()\n"); /* return err if fail to open DT */ panel_node = of_find_node_by_path(DT_PATH_DISPLAY1); if (panel_node == NULL) { r = -ENODEV; goto err; } /* Retrieve the panel information */ panel_prop = of_get_property(panel_node, "dsi_clk_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.clk_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_clk_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.clk_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data1_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data1_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data1_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data1_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data2_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data2_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data2_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data2_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data3_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data3_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data3_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data3_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data4_lane", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data4_lane = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "dsi_data4_pol", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.data4_pol = *(u8 *)panel_prop; panel_prop = of_get_property(panel_node, "gpio_reset", NULL); if (panel_prop != NULL) mapphone_panel_data.reset_gpio = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "rst_delay_after_pwr", NULL); if (panel_prop != NULL) mapphone_panel_data.rst_delay_after_pwr = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "rst_delay_after_high", NULL); if (panel_prop != NULL) mapphone_panel_data.rst_delay_after_high = *(u32 *)panel_prop; r = mapphone_dt_get_panel_power_supply(panel_node); if (r) goto end; panel_prop = of_get_property(panel_node, "disp_cabc_en", NULL); if (panel_prop != NULL) mapphone_displ_lvds_cabc_en = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "color_en", NULL); if (panel_prop != NULL) mapphone_displ_color_en = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "lcd_bl_pwm", NULL); if (panel_prop != NULL) mapphone_displ_lcd_bl_pwm = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_wp_g", NULL); if (panel_prop != NULL) mapphone_displ_lvds_wp_g = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "lvds_wp_e", NULL); if (panel_prop != NULL) mapphone_displ_lvds_wp_e = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "type", NULL); if (panel_prop != NULL) mapphone_lcd_device.panel.panel_id = *(u32 *)panel_prop; panel_prop = of_get_property(panel_node, "regn", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dsi.regn = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dsi.regm = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm3", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dsi.regm_dispc = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "regm4", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dsi.regm_dsi = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lp_clk_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dsi.lp_clk_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "lck_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dispc.channel.lck_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "pck_div", NULL); if (panel_prop != NULL) mapphone_lcd_device.clocks.dispc.channel.pck_div = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "d2l_use_ulps", NULL); if (panel_prop != NULL) mapphone_lcd_device.phy.dsi.d2l_use_ulps = *(u16 *)panel_prop; panel_prop = of_get_property(panel_node, "disp_intf", NULL); if (panel_prop != NULL) { disp_intf = *(u8 *)panel_prop; if ((disp_intf == OMAP_DSS_DISP_INTF_MIPI_VP_CM) || (disp_intf == OMAP_DSS_DISP_INTF_MIPI_L4_CM)) mapphone_lcd_device.phy.dsi.type = OMAP_DSS_DSI_TYPE_CMD_MODE; else if ((disp_intf == OMAP_DSS_DISP_INTF_MIPI_VP_VM) || (disp_intf == OMAP_DSS_DISP_INTF_MIPI_L4_VM) || (disp_intf == OMAP_DSS_DISP_INTF_MIPI_LVDS_VP_VM)) { mapphone_lcd_device.phy.dsi.type = OMAP_DSS_DSI_TYPE_VIDEO_MODE; #ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT mapphone_lcd_device.skip_vm_init = true; #else mapphone_lcd_device.skip_vm_init = false; #endif } else { PANELERR("Invalid disp_intf in dt = %d\n", disp_intf); r = -ENODEV; } } end: of_node_put(panel_node); err: return r; }