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