Example #1
0
//added for AU3.B-322 2009.10.23 wesley start
void pnx_bl_shutdown(struct platform_device *pdev)
{
/* ACER BobIHLee@20100505, support AS1 project*/
#if (defined ACER_L1_AU4) || (defined ACER_L1_K2)|| defined (ACER_L1_AS1)
/* End BobIHLee@20100505*/
	pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0); /* backlight OFF */
	mdelay(3);
#else
	pnx_gpio_set_mode(pnx_bl_pdata->gpio, GPIO_MODE_MUX1);
	writel(0, pnx_bl_pdata->pwm_tmr);
	clk_disable(pwm1Clk);	
#endif
}
Example #2
0
static int pnx_bl_set_intensity(struct backlight_device *bd)
{
/* ACER BobIHLee@20100505, support AS1 project*/
#if (defined ACER_L1_AU4) || (defined ACER_L1_K2) || defined (ACER_L1_AS1)
/* End BobIHLee@20100505*/
	int intensity = bd->props.brightness;
	int Jump_level;
	int i;
	
	if (bd->props.power != FB_BLANK_UNBLANK)
		intensity = 0;
	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
		intensity = 0;

	if ( intensity == BackLight_Level ) {
		return 0;
	}

	if ( BackLight_Level == 0 ) {
		pnx_gpio_write_pin(pnx_bl_pdata->gpio, 1);
		udelay(30);
		Jump_level = 16 - intensity ;
		for ( i = 0 ; i < Jump_level ; i++) {
			pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0);
			udelay(1);
			pnx_gpio_write_pin(pnx_bl_pdata->gpio, 1);
			udelay(1);
		}
		BackLight_Level = intensity;
	} else {
		if ( intensity == 0 ) {
			pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0); /* backlight OFF */
			mdelay(10);
			BackLight_Level = 0 ;
			return 0;
		} else if ( BackLight_Level > intensity ) {
			Jump_level = BackLight_Level - intensity ;
			for ( i = 0 ; i < Jump_level ; i++) {
				pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0);
				udelay(1);
				pnx_gpio_write_pin(pnx_bl_pdata->gpio, 1);
				udelay(1);
			}
			BackLight_Level = intensity;
		}else {
			Jump_level = 16 + BackLight_Level - intensity ;
			for ( i = 0 ; i < Jump_level ; i++) {
				pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0);
				udelay(1);
				pnx_gpio_write_pin(pnx_bl_pdata->gpio, 1);
				udelay(1);
			}
			BackLight_Level = intensity;
		}
	}

	return 0;
#else
	int intensity = bd->props.brightness;
	int ret=0;

	if (bd->props.power != FB_BLANK_UNBLANK)
		intensity = 0;
	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
		intensity = 0;

	if ( intensity < bd->props.max_brightness )
	{
		pnx_gpio_set_mode(pnx_bl_pdata->gpio, GPIO_MODE_MUX1);

		if ((intensity !=0) && (clk_get_usecount(pwm1Clk) == 0))
		    clk_enable(pwm1Clk);

		ret = writel(intensity, pnx_bl_pdata->pwm_tmr);

		if (intensity==0)
			clk_disable(pwm1Clk);
	} 
	else
	{
		/* Write value even if not used for pnx_bl_get_intensity usage */
		ret = writel(intensity, pnx_bl_pdata->pwm_tmr);
		clk_disable(pwm1Clk);
		pnx_gpio_set_mode(pnx_bl_pdata->gpio, GPIO_MODE_MUX0);
		gpio_set_value(pnx_bl_pdata->gpio, 1);
	}
	return ret;
#endif
}
Example #3
0
static int pnx_bl_probe(struct platform_device *pdev)
{
	/* ACER Bright Lee, 2010/7/21, silent boot don't need turn on backlight during booting { */
	extern int getOnCause(void);
	/* } ACER Bright Lee, 2010/7/21 */
/* ACER BobIHLee@20100505, support AS1 project*/
#if (defined ACER_L1_AU4) || (defined ACER_L1_K2)|| defined (ACER_L1_AS1)
/* End BobIHLee@20100505*/
	//struct backlight_device *pnx_backlight_device;
	//int ret;
	pnx_bl_pdata = pdev->dev.platform_data;

	if (!pnx_bl_pdata)
		return -ENODEV;
	
	pnx_backlight_device = backlight_device_register("pnx-bl",
							     &pdev->dev, NULL,
							     &pnx_bl_ops);
	if (IS_ERR(pnx_backlight_device))
		return PTR_ERR(pnx_backlight_device);

	platform_set_drvdata(pdev, pnx_backlight_device);


	//Config GPIO
	pnx_gpio_request(pnx_bl_pdata->gpio);	
	pnx_gpio_set_direction(pnx_bl_pdata->gpio, GPIO_DIR_OUTPUT);
	pnx_gpio_set_mode(pnx_bl_pdata->gpio, pnx_bl_pdata->pin_mux);

        //Selwyn 2009/1/20 modified for Acer power off charging
        #if 0
	//make sure the initial state is off
	pnx_gpio_write_pin(pnx_bl_pdata->gpio, 0); /* default: backlight OFF */	
	mdelay(3);
	//turn on backlight at max level first
	pnx_gpio_write_pin(pnx_bl_pdata->gpio, 1);
	udelay(1);
	#endif
	#ifdef DISABLE_CHARGING_ANIMATION
	if (getOnCause() == 2)
	{
		BackLight_Level = HW_LEVEL_MIN;
	}
	else
	{
		BackLight_Level = 4;
	}
	#else
	{
		BackLight_Level = HW_LEVEL_MAX;
	}
	#endif
	/* ACER Bright Lee, 2010/7/21, silent boot don't need turn on backlight during booting { */
	#if defined(ENABLE_SILENT_ALL) || defined(ENABLE_SILENT_BASIC)
	if (getOnCause() == 4)
	{
		BackLight_Level = HW_LEVEL_MIN;
	}
	#endif
	/* } ACER Bright Lee, 2010/7/21 */
        //~Selwyn 2009/1/20 modified
	pnx_backlight_device->props.power = FB_BLANK_UNBLANK;
	pnx_backlight_device->props.brightness = HW_LEVEL_MAX;
	pnx_backlight_device->props.max_brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
	//BackLight_Level = HW_LEVEL_MAX;

    return 0;
#else
/*     struct pnx_bl_platform_data *pdata = pdev->dev.platform_data; */
	int ret;

/* 	pnx_bl_pdev = pdev; */
    pnx_bl_pdata = pdev->dev.platform_data;

	if (!pnx_bl_pdata)
		return -ENODEV;
    
    
    pwm1Clk = clk_get(0, pnx_bl_pdata->pwm_clk);
    clk_enable(pwm1Clk);
	ret = writel(HW_LEVEL_MAX, pnx_bl_pdata->pwm_pf);
    

//	pnx_backlight_device = backlight_device_register("lcd-backlight",
	pnx_backlight_device = backlight_device_register("pnx-bl",
							     &pdev->dev, NULL,
							     &pnx_bl_ops);
	if (IS_ERR(pnx_backlight_device))
		return PTR_ERR(pnx_backlight_device);

	platform_set_drvdata(pdev, pnx_backlight_device);

	gpio_request(pnx_bl_pdata->gpio, pdev->name);
	gpio_direction_output(pnx_bl_pdata->gpio, 1 /* TBD LPA*/);
	pnx_gpio_set_mode(pnx_bl_pdata->gpio, GPIO_MODE_MUX1);
    
	pnx_backlight_device->props.power = FB_BLANK_UNBLANK;
	pnx_backlight_device->props.brightness = HW_LEVEL_MAX;

	/* ACER Bright Lee, 2010/7/21, silent boot don't need turn on backlight during booting { */
	#if defined(ENABLE_SILENT_ALL) || defined(ENABLE_SILENT_BASIC)
	if (getOnCause() == 4)
	{
		pnx_backlight_device->props.brightness = HW_LEVEL_MIN;
	}
	else
	{
		pnx_backlight_device->props.brightness = HW_LEVEL_MAX;
	}
	#endif
	/* } ACER Bright Lee, 2010/7/21 */
	pnx_backlight_device->props.max_brightness = HW_LEVEL_MAX - HW_LEVEL_MIN;
    clk_disable(pwm1Clk);
	pnx_bl_set_intensity(pnx_backlight_device);
	
#ifdef CONFIG_HAS_EARLYSUSPEND
	register_early_suspend(&pnx_bl_earlys);
#endif

    return 0;
#endif
}
int pnx_gpio_set_mode_gpio(int gpio)
{
	int muxmode = gpio >= GPIO_B0 ? GPIO_MODE_MUX1 : GPIO_MODE_MUX0;
	return pnx_gpio_set_mode(gpio, muxmode);
}