Пример #1
0
static int lm3630_probe(struct i2c_client *client,
				  const struct i2c_device_id *id)
{
	struct lm3630_platform_data *pdata = client->dev.platform_data;
	struct lm3630_chip_data *pchip;
	int ret;
/* OPPO 2013-10-24 yxq Add begin for backlight info */
    unsigned int revision;
    static char *temp;
/* OPPO 2013-10-24 yxq Add end */
	printk("%s:yanghai.\n", __func__);
	if (client->dev.of_node) {
		pdata = devm_kzalloc(&client->dev,
			sizeof(struct lm3630_platform_data), GFP_KERNEL);
		if (!pdata) {
			dev_err(&client->dev, "Failed to allocate memory\n");
			return -ENOMEM;
		}

		ret = lm3630_dt(&client->dev, pdata);
		if (ret)
			return ret;
	} else
		pdata = client->dev.platform_data;
	
	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		dev_err(&client->dev, "fail : i2c functionality check...\n");
		return -EOPNOTSUPP;
	}

	if (pdata == NULL) {
		dev_err(&client->dev, "fail : no platform data.\n");
		return -ENODATA;
	}

	pchip = devm_kzalloc(&client->dev, sizeof(struct lm3630_chip_data),
			     GFP_KERNEL);
	if (!pchip)
		return -ENOMEM;
	lm3630_pchip=pchip;
	
	pchip->pdata = pdata;
	pchip->dev = &client->dev;
//HW enable 
	ret = gpio_request(LM3630_ENABLE_GPIO, "lm3528_enable");
	if (ret) {
		pr_err("lm3528_enable gpio_request failed: %d\n", ret);
		goto err_gpio_req;
	}
	ret = gpio_direction_output(LM3630_ENABLE_GPIO, 1);
	if (ret) {
		pr_err("%s: unable to enable!!!!!!!!!!!!\n", __func__);
		goto err_gpio_req;
	}
//HW enable
	pchip->regmap = devm_regmap_init_i2c(client, &lm3630_regmap);
	if (IS_ERR(pchip->regmap)) {
		ret = PTR_ERR(pchip->regmap);
		dev_err(&client->dev, "fail : allocate register map: %d\n",
			ret);
		return ret;
	}
	i2c_set_clientdata(client, pchip);

	/* chip initialize */
	ret = lm3630_chip_init(pchip);
/* OPPO 2013-10-24 yxq Add begin for reason */
    regmap_read(pchip->regmap,REG_REVISION,&revision);
    if (revision == 0x02) {
        temp = "02";
    } else {
        temp = "unknown";
    }
    register_device_proc("backlight", temp, "LM3630A");
/* OPPO 2013-10-24 yxq Add end */
	if (ret < 0) {
		dev_err(&client->dev, "fail : init chip\n");
		goto err_chip_init;
	}
#ifdef CONFIG_BL_REGISTER
	switch (pdata->bank_a_ctrl) {
	case BANK_A_CTRL_ALL:
		ret = lm3630_backlight_register(pchip, BLED_ALL);
		pdata->bank_b_ctrl = BANK_B_CTRL_DISABLE;
		break;
	case BANK_A_CTRL_LED1:
		ret = lm3630_backlight_register(pchip, BLED_1);
		break;
	case BANK_A_CTRL_LED2:
		ret = lm3630_backlight_register(pchip, BLED_2);
		pdata->bank_b_ctrl = BANK_B_CTRL_DISABLE;
		break;
	default:
		break;
	}

	if (ret < 0)
		goto err_bl_reg;

	if (pdata->bank_b_ctrl && pchip->bled2 == NULL) {
		ret = lm3630_backlight_register(pchip, BLED_2);
		if (ret < 0)
			goto err_bl_reg;
	}
#endif

	/* interrupt enable  : irq 0 is not allowed for lm3630 */
	pchip->irq = client->irq;
	printk("%s:yanghai client irq =%d\n", __func__,client->irq);
	pchip->irq=0;
	if (pchip->irq)
		lm3630_intr_config(pchip);
	printk("%s:yanghai----\n", __func__);
	dev_err(&client->dev, "LM3630 backlight register OK.\n");

#ifdef CONFIG_VENDOR_EDIT
/* OPPO zhanglong add 2013-08-30 for ftm test LCD backlight */
    ret = device_create_file(&client->dev, &dev_attr_ftmbacklight);
	if (ret < 0) {
		dev_err(&client->dev, "failed to create node ftmbacklight\n");
	}
/* OPPO zhanglong add 2013-08-30 for ftm test LCD backlight end */
#endif //CONFIG_VENDOR_EDIT

	return 0;
#ifdef CONFIG_BL_REGISTER
err_bl_reg:
	dev_err(&client->dev, "fail : backlight register.\n");
	lm3630_backlight_unregister(pchip);
#endif	
err_chip_init:
	return ret;

err_gpio_req:
	if (gpio_is_valid(LM3630_ENABLE_GPIO))
		gpio_free(LM3630_ENABLE_GPIO);
	return ret;
	
}
Пример #2
0
static int __init mipi_cmd_orise_oppo_n1_pt_init(void)
{
    int ret;

/* OPPO 2013-11-13 gousj Add begin for device information */
#ifdef CONFIG_VENDOR_EDIT
	register_device_proc("lcd", DEVICE_VERSION, DEVICE_MANUFACUTRE);
#endif
/* OPPO 2013-11-13 gousj Add end */
	
    if (msm_fb_detect_client("mipi_cmd_orise_oppo_n1"))
        return 0;
    pr_info("%s:\n", __func__);
    pinfo.xres = 1080;
    pinfo.yres = 1920;
    pinfo.type = MIPI_CMD_PANEL;
    pinfo.pdest = DISPLAY_1;
    pinfo.wait_cycle = 0;
    pinfo.bpp = 24;
    pinfo.mipi.data_lane2 = TRUE;

    pinfo.lcdc.h_back_porch = 120;
    //pinfo.lcdc.h_front_porch = 100;
	//pinfo.lcdc.h_back_porch = 101;
    pinfo.lcdc.h_front_porch = 100;
    pinfo.lcdc.h_pulse_width = 8;
    pinfo.lcdc.v_back_porch = 11;
    pinfo.lcdc.v_front_porch = 10;
    pinfo.lcdc.v_pulse_width = 5;
    pinfo.lcdc.border_clr = 0;  //blk

    pinfo.lcdc.underflow_clr = 0xff;    /* blue */
    pinfo.lcdc.hsync_skew = 0;
    pinfo.bl_max = 255;
    pinfo.bl_min = 0;
    pinfo.fb_num = 2;
    pinfo.clk_rate = 900000000;
    pinfo.mipi.esc_byte_ratio = 4;
    pinfo.lcd.vsync_enable = TRUE;
    pinfo.lcd.hw_vsync_mode = TRUE;
    /* OPPO 2013-12-10 gousj Add begin for new panel adaption increase frame rate */
    pinfo.lcd.refx100 = 6400; /* adjust refx100 to prevent tearing */
    /* OPPO 2013-12-10 gousj Add end */
    pinfo.mipi.mode = DSI_CMD_MODE;
    pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
    pinfo.mipi.vc = 0;
    pinfo.mipi.rgb_swap = DSI_RGB_SWAP_RGB;
    pinfo.mipi.data_lane0 = TRUE;
    pinfo.mipi.data_lane1 = TRUE;
    pinfo.mipi.data_lane2 = TRUE;
    pinfo.mipi.data_lane3 = TRUE;
    //pinfo.mipi.t_clk_post = 0x04;
    //pinfo.mipi.t_clk_pre = 0x1d;
	pinfo.mipi.t_clk_post = 0x20;
	pinfo.mipi.t_clk_pre = 0x2F;
    pinfo.mipi.stream = 0; /* dma_p */
    pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
    pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
	//pinfo.mipi.traffic_mode = DSI_BURST_MODE;
	//pinfo.mipi.traffic_mode = DSI_NON_BURST_SYNCH_EVENT;
	//pinfo.mipi.dsi_pclk_rate = ;
	pinfo.mipi.frame_rate = 61;
    pinfo.mipi.te_sel = 1; /* TE from vsync gpio */
    pinfo.mipi.interleave_max = 1;
    pinfo.mipi.insert_dcs_cmd = TRUE;
    pinfo.mipi.wr_mem_continue = 0x3c;
    pinfo.mipi.wr_mem_start = 0x2c;
    pinfo.mipi.dsi_phy_db = &dsi_cmd_mode_phy_db_1080p;
    pinfo.mipi.tx_eot_append = 0x01;
    pinfo.mipi.rx_eot_ignore = 0x0;


    ret = mipi_orise_device_register(&pinfo, MIPI_DSI_PRIM,
                                     MIPI_DSI_PANEL_720P_PT);
    if (ret)
        pr_err("%s: failed to register device!\n", __func__);

    return ret;
}