diff options
-rw-r--r-- | firmware/export/config-ondavx747.h | 13 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx7X7.c | 93 |
2 files changed, 34 insertions, 72 deletions
diff --git a/firmware/export/config-ondavx747.h b/firmware/export/config-ondavx747.h index d735c045e2..2e757f36be 100644 --- a/firmware/export/config-ondavx747.h +++ b/firmware/export/config-ondavx747.h | |||
@@ -102,17 +102,14 @@ | |||
102 | #define HAVE_BACKLIGHT | 102 | #define HAVE_BACKLIGHT |
103 | #define HAVE_BACKLIGHT_BRIGHTNESS | 103 | #define HAVE_BACKLIGHT_BRIGHTNESS |
104 | 104 | ||
105 | /* define this if the backlight can be set to a brightness */ | ||
106 | #define __BACKLIGHT_INIT | ||
107 | |||
108 | /* Which backlight fading type? */ | 105 | /* Which backlight fading type? */ |
109 | //#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_PWM | 106 | #define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_HW_REG |
110 | 107 | ||
111 | /* Main LCD backlight brightness range and defaults */ | 108 | /* Main LCD backlight brightness range and defaults */ |
112 | #define MIN_BRIGHTNESS_SETTING 100 | 109 | #define MIN_BRIGHTNESS_SETTING 1 |
113 | #define MAX_BRIGHTNESS_SETTING 300 | 110 | #define MAX_BRIGHTNESS_SETTING 30 |
114 | #define DEFAULT_BRIGHTNESS_SETTING 300 /* "full brightness" */ | 111 | #define DEFAULT_BRIGHTNESS_SETTING 30 /* "full brightness" */ |
115 | #define DEFAULT_DIMNESS_SETTING 100 /* "most dim" */ | 112 | #define DEFAULT_DIMNESS_SETTING 1 /* "most dim" */ |
116 | 113 | ||
117 | /* Define this if you have a software controlled poweroff */ | 114 | /* Define this if you have a software controlled poweroff */ |
118 | #define HAVE_SW_POWEROFF | 115 | #define HAVE_SW_POWEROFF |
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx7X7.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx7X7.c index 72e469977b..391af0acb7 100644 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx7X7.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx7X7.c | |||
@@ -27,84 +27,50 @@ | |||
27 | #define BACKLIGHT_GPIO (32*3+31) | 27 | #define BACKLIGHT_GPIO (32*3+31) |
28 | #define BACKLIGHT_PWM 7 | 28 | #define BACKLIGHT_PWM 7 |
29 | 29 | ||
30 | /* TODO: use HW PWM */ | 30 | /* PWM counter (PWM INITL = 0): |
31 | #define SW_PWM 1 | 31 | * [0, PWM half rate[ -> backlight off |
32 | #if SW_PWM | 32 | * [PWM half rate, PWM full rate[ -> backlight on |
33 | 33 | * [PWM full rate, PWM full rate] -> counter reset to 0 | |
34 | static bool backlight_on; | 34 | */ |
35 | static int old_val; | ||
35 | static void set_backlight(int val) | 36 | static void set_backlight(int val) |
36 | { | 37 | { |
37 | (void)val; | 38 | if(val == old_val) |
38 | } | 39 | return; |
39 | 40 | ||
40 | bool _backlight_init(void) | 41 | /* The pulse repetition frequency should be greater than 100Hz so |
41 | { | 42 | the flickering is not perceptible to the human eye but |
42 | __gpio_as_output(BACKLIGHT_GPIO); | 43 | not greater than about 1kHz. */ |
43 | __gpio_set_pin(BACKLIGHT_GPIO); | ||
44 | |||
45 | backlight_on = true; | ||
46 | 44 | ||
47 | return true; | 45 | /* Clock = 8192 Hz */ |
48 | } | 46 | /* 1 <= val <= 30 */ |
47 | int cycle = (MAX_BRIGHTNESS_SETTING - val + 1); | ||
49 | 48 | ||
50 | void _backlight_on(void) | 49 | __tcu_disable_pwm_output(BACKLIGHT_PWM); |
51 | { | 50 | __tcu_stop_counter(BACKLIGHT_PWM); |
52 | if(!backlight_on) | ||
53 | __gpio_set_pin(BACKLIGHT_GPIO); | ||
54 | |||
55 | backlight_on = true; | ||
56 | } | ||
57 | 51 | ||
58 | void _backlight_off(void) | 52 | __tcu_set_count(BACKLIGHT_PWM, 0); |
59 | { | 53 | __tcu_set_half_data(BACKLIGHT_PWM, cycle-1); |
60 | if(backlight_on) | 54 | __tcu_set_full_data(BACKLIGHT_PWM, cycle); |
61 | __gpio_clear_pin(BACKLIGHT_GPIO); | ||
62 | |||
63 | backlight_on = false; | ||
64 | } | ||
65 | 55 | ||
66 | #else | 56 | __tcu_start_counter(BACKLIGHT_PWM); |
57 | __tcu_enable_pwm_output(BACKLIGHT_PWM); | ||
67 | 58 | ||
68 | static int old_val; | ||
69 | static void set_backlight(int val) | ||
70 | { | ||
71 | if(val == old_val) | ||
72 | return; | ||
73 | |||
74 | /* Taken from the OF */ | ||
75 | int tmp; | ||
76 | tmp = (val/2 + __cpm_get_rtcclk()) / val; | ||
77 | if(tmp > 0xFFFF) | ||
78 | tmp = 0xFFFF; | ||
79 | |||
80 | __tcu_set_half_data(BACKLIGHT_PWM, (tmp * val * 1374389535) >> 5); | ||
81 | __tcu_set_full_data(BACKLIGHT_PWM, tmp); | ||
82 | |||
83 | old_val = val; | 59 | old_val = val; |
84 | } | 60 | } |
85 | 61 | ||
86 | static void set_backlight_on(void) | 62 | static void set_backlight_on(void) |
87 | { | 63 | { |
88 | if(old_val == MAX_BRIGHTNESS_SETTING) | 64 | set_backlight(old_val); |
89 | return; | ||
90 | |||
91 | __tcu_start_timer_clock(BACKLIGHT_PWM); | ||
92 | |||
93 | set_backlight(MAX_BRIGHTNESS_SETTING); | ||
94 | |||
95 | __tcu_set_count(BACKLIGHT_PWM, 0); | ||
96 | __tcu_start_counter(BACKLIGHT_PWM); | ||
97 | 65 | ||
98 | __tcu_enable_pwm_output(BACKLIGHT_PWM); | 66 | __tcu_enable_pwm_output(BACKLIGHT_PWM); |
67 | __tcu_start_counter(BACKLIGHT_PWM); | ||
99 | } | 68 | } |
100 | 69 | ||
101 | static void set_backlight_off(void) | 70 | static void set_backlight_off(void) |
102 | { | 71 | { |
103 | __tcu_stop_counter(BACKLIGHT_PWM); | 72 | __tcu_stop_counter(BACKLIGHT_PWM); |
104 | __tcu_disable_pwm_output(BACKLIGHT_PWM); | 73 | __tcu_disable_pwm_output(BACKLIGHT_PWM); |
105 | __tcu_stop_timer_clock(BACKLIGHT_PWM); | ||
106 | |||
107 | old_val = -1; | ||
108 | } | 74 | } |
109 | 75 | ||
110 | bool _backlight_init(void) | 76 | bool _backlight_init(void) |
@@ -113,17 +79,17 @@ bool _backlight_init(void) | |||
113 | __tcu_start_timer_clock(BACKLIGHT_PWM); | 79 | __tcu_start_timer_clock(BACKLIGHT_PWM); |
114 | 80 | ||
115 | __tcu_stop_counter(BACKLIGHT_PWM); | 81 | __tcu_stop_counter(BACKLIGHT_PWM); |
116 | __tcu_disable_pwm_output(BACKLIGHT_PWM); | ||
117 | |||
118 | __tcu_init_pwm_output_low(BACKLIGHT_PWM); | 82 | __tcu_init_pwm_output_low(BACKLIGHT_PWM); |
119 | __tcu_select_rtcclk(BACKLIGHT_PWM); | 83 | __tcu_set_pwm_output_shutdown_graceful(BACKLIGHT_PWM); |
120 | __tcu_select_clk_div1(BACKLIGHT_PWM); | 84 | __tcu_enable_pwm_output(BACKLIGHT_PWM); |
85 | |||
86 | __tcu_select_rtcclk(BACKLIGHT_PWM); /* 32.768 kHz */ | ||
87 | __tcu_select_clk_div1(BACKLIGHT_PWM); /* 8.192 kHz */ | ||
121 | 88 | ||
122 | __tcu_mask_half_match_irq(BACKLIGHT_PWM); | 89 | __tcu_mask_half_match_irq(BACKLIGHT_PWM); |
123 | __tcu_mask_full_match_irq(BACKLIGHT_PWM); | 90 | __tcu_mask_full_match_irq(BACKLIGHT_PWM); |
124 | |||
125 | old_val = -1; | ||
126 | 91 | ||
92 | old_val = MAX_BRIGHTNESS_SETTING; | ||
127 | set_backlight_on(); | 93 | set_backlight_on(); |
128 | 94 | ||
129 | return true; | 95 | return true; |
@@ -138,7 +104,6 @@ void _backlight_off(void) | |||
138 | { | 104 | { |
139 | set_backlight_off(); | 105 | set_backlight_off(); |
140 | } | 106 | } |
141 | #endif /* !SW_PWM */ | ||
142 | 107 | ||
143 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS | 108 | #ifdef HAVE_BACKLIGHT_BRIGHTNESS |
144 | void _backlight_set_brightness(int brightness) | 109 | void _backlight_set_brightness(int brightness) |