1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * PWM BACKLIGHT driver for Board based on EXYNOS. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Author: Donghwa Lee <dh09.lee@samsung.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Derived from linux/drivers/video/backlight/pwm_backlight.c 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <common.h> 12*4882a593Smuzhiyun #include <pwm.h> 13*4882a593Smuzhiyun #include <linux/types.h> 14*4882a593Smuzhiyun #include <asm/io.h> 15*4882a593Smuzhiyun #include <asm/arch/cpu.h> 16*4882a593Smuzhiyun #include <asm/arch/gpio.h> 17*4882a593Smuzhiyun #include <asm/arch/pwm.h> 18*4882a593Smuzhiyun #include <asm/arch/pwm_backlight.h> 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun static struct pwm_backlight_data *pwm; 21*4882a593Smuzhiyun exynos_pwm_backlight_update_status(void)22*4882a593Smuzhiyunstatic int exynos_pwm_backlight_update_status(void) 23*4882a593Smuzhiyun { 24*4882a593Smuzhiyun int brightness = pwm->brightness; 25*4882a593Smuzhiyun int max = pwm->max_brightness; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun if (brightness == 0) { 28*4882a593Smuzhiyun pwm_config(pwm->pwm_id, 0, pwm->period); 29*4882a593Smuzhiyun pwm_disable(pwm->pwm_id); 30*4882a593Smuzhiyun } else { 31*4882a593Smuzhiyun pwm_config(pwm->pwm_id, 32*4882a593Smuzhiyun brightness * pwm->period / max, pwm->period); 33*4882a593Smuzhiyun pwm_enable(pwm->pwm_id); 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun return 0; 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun exynos_pwm_backlight_init(struct pwm_backlight_data * pd)38*4882a593Smuzhiyunint exynos_pwm_backlight_init(struct pwm_backlight_data *pd) 39*4882a593Smuzhiyun { 40*4882a593Smuzhiyun pwm = pd; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun exynos_pwm_backlight_update_status(); 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun return 0; 45*4882a593Smuzhiyun } 46