diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c | 14 | ||||
-rw-r--r-- | firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c | 12 | ||||
-rw-r--r-- | firmware/target/arm/imx233/lcdif-imx233.c | 79 | ||||
-rw-r--r-- | firmware/target/arm/imx233/lcdif-imx233.h | 59 | ||||
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c | 14 |
5 files changed, 50 insertions, 128 deletions
diff --git a/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c b/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c index 6f2adc43ae..63b033a8a9 100644 --- a/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c +++ b/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c | |||
@@ -37,8 +37,8 @@ static unsigned lcd_yuv_options = 0; | |||
37 | static void setup_parameters(void) | 37 | static void setup_parameters(void) |
38 | { | 38 | { |
39 | imx233_lcdif_reset(); | 39 | imx233_lcdif_reset(); |
40 | imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_18_BIT); | 40 | imx233_lcdif_set_lcd_databus_width(BV_LCDIF_CTRL_LCD_DATABUS_WIDTH__18_BIT); |
41 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); | 41 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__18_BIT); |
42 | imx233_lcdif_set_timings(2, 2, 3, 3); | 42 | imx233_lcdif_set_timings(2, 2, 3, 3); |
43 | imx233_lcdif_enable_underflow_recover(true); | 43 | imx233_lcdif_enable_underflow_recover(true); |
44 | } | 44 | } |
@@ -120,7 +120,7 @@ static void lcd_write_reg(uint32_t reg, uint32_t data) | |||
120 | { | 120 | { |
121 | uint32_t old_reg = reg; | 121 | uint32_t old_reg = reg; |
122 | /* get back to 18-bit word length */ | 122 | /* get back to 18-bit word length */ |
123 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); | 123 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__18_BIT); |
124 | reg = encode_16_to_18(reg); | 124 | reg = encode_16_to_18(reg); |
125 | data = encode_16_to_18(data); | 125 | data = encode_16_to_18(data); |
126 | 126 | ||
@@ -208,11 +208,11 @@ void lcd_init_device(void) | |||
208 | setup_lcdif_clock(); | 208 | setup_lcdif_clock(); |
209 | 209 | ||
210 | // reset device | 210 | // reset device |
211 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 211 | BF_SET(LCDIF_CTRL1, RESET); |
212 | mdelay(50); | 212 | mdelay(50); |
213 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 213 | BF_CLR(LCDIF_CTRL1, RESET); |
214 | mdelay(10); | 214 | mdelay(10); |
215 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 215 | BF_SET(LCDIF_CTRL1, RESET); |
216 | 216 | ||
217 | lcd_init_seq(); | 217 | lcd_init_seq(); |
218 | #ifdef HAVE_LCD_ENABLE | 218 | #ifdef HAVE_LCD_ENABLE |
@@ -283,7 +283,7 @@ void lcd_update_rect(int x, int y, int w, int h) | |||
283 | lcd_write_reg(0x201, 0); | 283 | lcd_write_reg(0x201, 0); |
284 | lcd_write_reg(0x202, 0); | 284 | lcd_write_reg(0x202, 0); |
285 | imx233_lcdif_wait_ready(); | 285 | imx233_lcdif_wait_ready(); |
286 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_16_BIT); | 286 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__16_BIT); |
287 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ | 287 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ |
288 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ | 288 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ |
289 | 289 | ||
diff --git a/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c b/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c index 17fab032bf..668f1f7c1a 100644 --- a/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c +++ b/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c | |||
@@ -37,8 +37,8 @@ static unsigned lcd_yuv_options = 0; | |||
37 | static void setup_parameters(void) | 37 | static void setup_parameters(void) |
38 | { | 38 | { |
39 | imx233_lcdif_reset(); | 39 | imx233_lcdif_reset(); |
40 | imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_16_BIT); | 40 | imx233_lcdif_set_lcd_databus_width(BV_LCDIF_CTRL_LCD_DATABUS_WIDTH__16_BIT); |
41 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_16_BIT); | 41 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__16_BIT); |
42 | imx233_lcdif_set_timings(2, 2, 3, 3); | 42 | imx233_lcdif_set_timings(2, 2, 3, 3); |
43 | imx233_lcdif_enable_underflow_recover(true); | 43 | imx233_lcdif_enable_underflow_recover(true); |
44 | } | 44 | } |
@@ -182,11 +182,11 @@ void lcd_init_device(void) | |||
182 | setup_lcdif_clock(); | 182 | setup_lcdif_clock(); |
183 | 183 | ||
184 | // reset device | 184 | // reset device |
185 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 185 | BF_SET(LCDIF_CTRL1, RESET); |
186 | mdelay(50); | 186 | mdelay(50); |
187 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 187 | BF_CLR(LCDIF_CTRL1, RESET); |
188 | mdelay(10); | 188 | mdelay(10); |
189 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 189 | BF_SET(LCDIF_CTRL1, RESET); |
190 | 190 | ||
191 | lcd_init_seq(); | 191 | lcd_init_seq(); |
192 | #ifdef HAVE_LCD_ENABLE | 192 | #ifdef HAVE_LCD_ENABLE |
@@ -258,7 +258,7 @@ void lcd_update_rect(int x, int y, int w, int h) | |||
258 | lcd_write_reg(0x22, 0); | 258 | lcd_write_reg(0x22, 0); |
259 | 259 | ||
260 | imx233_lcdif_wait_ready(); | 260 | imx233_lcdif_wait_ready(); |
261 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_16_BIT); | 261 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__16_BIT); |
262 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ | 262 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ |
263 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ | 263 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ |
264 | 264 | ||
diff --git a/firmware/target/arm/imx233/lcdif-imx233.c b/firmware/target/arm/imx233/lcdif-imx233.c index ad0931de40..f947fa69f1 100644 --- a/firmware/target/arm/imx233/lcdif-imx233.c +++ b/firmware/target/arm/imx233/lcdif-imx233.c | |||
@@ -21,30 +21,29 @@ | |||
21 | #include "lcdif-imx233.h" | 21 | #include "lcdif-imx233.h" |
22 | 22 | ||
23 | static unsigned lcdif_word_length = 0; | 23 | static unsigned lcdif_word_length = 0; |
24 | static unsigned lcdif_byte_packing = 0; | ||
25 | 24 | ||
26 | void imx233_lcdif_enable_underflow_recover(bool enable) | 25 | void imx233_lcdif_enable_underflow_recover(bool enable) |
27 | { | 26 | { |
28 | if(enable) | 27 | if(enable) |
29 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW; | 28 | BF_SET(LCDIF_CTRL1, RECOVER_ON_UNDERFLOW); |
30 | else | 29 | else |
31 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW; | 30 | BF_CLR(LCDIF_CTRL1, RECOVER_ON_UNDERFLOW); |
32 | } | 31 | } |
33 | 32 | ||
34 | void imx233_lcdif_enable_bus_master(bool enable) | 33 | void imx233_lcdif_enable_bus_master(bool enable) |
35 | { | 34 | { |
36 | if(enable) | 35 | if(enable) |
37 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__LCDIF_MASTER; | 36 | BF_SET(LCDIF_CTRL, LCDIF_MASTER); |
38 | else | 37 | else |
39 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__LCDIF_MASTER; | 38 | BF_CLR(LCDIF_CTRL, LCDIF_MASTER); |
40 | } | 39 | } |
41 | 40 | ||
42 | void imx233_lcdif_enable(bool enable) | 41 | void imx233_lcdif_enable(bool enable) |
43 | { | 42 | { |
44 | if(enable) | 43 | if(enable) |
45 | __REG_CLR(HW_LCDIF_CTRL) = __BLOCK_CLKGATE; | 44 | BF_CLR(LCDIF_CTRL, CLKGATE); |
46 | else | 45 | else |
47 | __REG_SET(HW_LCDIF_CTRL) = __BLOCK_CLKGATE; | 46 | BF_SET(LCDIF_CTRL, CLKGATE); |
48 | } | 47 | } |
49 | 48 | ||
50 | void imx233_lcdif_reset(void) | 49 | void imx233_lcdif_reset(void) |
@@ -55,64 +54,45 @@ void imx233_lcdif_reset(void) | |||
55 | void imx233_lcdif_set_timings(unsigned data_setup, unsigned data_hold, | 54 | void imx233_lcdif_set_timings(unsigned data_setup, unsigned data_hold, |
56 | unsigned cmd_setup, unsigned cmd_hold) | 55 | unsigned cmd_setup, unsigned cmd_hold) |
57 | { | 56 | { |
58 | HW_LCDIF_TIMING = (data_setup << HW_LCDIF_TIMING__DATA_SETUP_BP) | | 57 | HW_LCDIF_TIMING = BF_OR4(LCDIF_TIMING, DATA_SETUP(data_setup), |
59 | (data_hold << HW_LCDIF_TIMING__DATA_HOLD_BP) | | 58 | DATA_HOLD(data_hold), CMD_SETUP(cmd_setup), CMD_HOLD(cmd_hold)); |
60 | (cmd_setup << HW_LCDIF_TIMING__CMD_SETUP_BP) | | ||
61 | (cmd_hold << HW_LCDIF_TIMING__CMD_HOLD_BP); | ||
62 | } | 59 | } |
63 | 60 | ||
64 | void imx233_lcdif_set_lcd_databus_width(unsigned width) | 61 | void imx233_lcdif_set_lcd_databus_width(unsigned width) |
65 | { | 62 | { |
66 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_BM; | 63 | BF_WR(LCDIF_CTRL, LCD_DATABUS_WIDTH, width); |
67 | __REG_SET(HW_LCDIF_CTRL) = width; | ||
68 | } | 64 | } |
69 | 65 | ||
70 | void imx233_lcdif_set_word_length(unsigned word_length) | 66 | void imx233_lcdif_set_word_length(unsigned word_length) |
71 | { | 67 | { |
72 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__WORD_LENGTH_BM; | 68 | BF_WR(LCDIF_CTRL, WORD_LENGTH, word_length); |
73 | __REG_SET(HW_LCDIF_CTRL) = word_length; | ||
74 | lcdif_word_length = word_length; | 69 | lcdif_word_length = word_length; |
75 | } | 70 | } |
76 | 71 | ||
77 | unsigned imx233_lcdif_enable_irqs(unsigned irq_bm) | ||
78 | { | ||
79 | unsigned old_msk = __XTRACT(HW_LCDIF_CTRL1, IRQ_EN); | ||
80 | /* clear irq status */ | ||
81 | __REG_CLR(HW_LCDIF_CTRL1) = irq_bm << HW_LCDIF_CTRL1__IRQ_BP; | ||
82 | /* disable irqs */ | ||
83 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__IRQ_EN_BM; | ||
84 | /* enable irqs */ | ||
85 | __REG_SET(HW_LCDIF_CTRL1) = irq_bm << HW_LCDIF_CTRL1__IRQ_EN_BP; | ||
86 | |||
87 | return old_msk; | ||
88 | } | ||
89 | |||
90 | void imx233_lcdif_set_byte_packing_format(unsigned byte_packing) | 72 | void imx233_lcdif_set_byte_packing_format(unsigned byte_packing) |
91 | { | 73 | { |
92 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BM; | 74 | BF_WR(LCDIF_CTRL1, BYTE_PACKING_FORMAT, byte_packing); |
93 | __REG_SET(HW_LCDIF_CTRL1) = byte_packing << HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BP; | ||
94 | lcdif_byte_packing = byte_packing; | ||
95 | } | 75 | } |
96 | 76 | ||
97 | void imx233_lcdif_set_data_format(bool data_fmt_16, bool data_fmt_18, bool data_fmt_24) | 77 | void imx233_lcdif_set_data_format(bool data_fmt_16, bool data_fmt_18, bool data_fmt_24) |
98 | { | 78 | { |
99 | if(data_fmt_16) | 79 | if(data_fmt_16) |
100 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_16_BIT; | 80 | BF_SET(LCDIF_CTRL, DATA_FORMAT_16_BIT); |
101 | else | 81 | else |
102 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_16_BIT; | 82 | BF_CLR(LCDIF_CTRL, DATA_FORMAT_16_BIT); |
103 | if(data_fmt_18) | 83 | if(data_fmt_18) |
104 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_18_BIT; | 84 | BF_SET(LCDIF_CTRL, DATA_FORMAT_18_BIT); |
105 | else | 85 | else |
106 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_18_BIT; | 86 | BF_CLR(LCDIF_CTRL, DATA_FORMAT_18_BIT); |
107 | if(data_fmt_24) | 87 | if(data_fmt_24) |
108 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_24_BIT; | 88 | BF_SET(LCDIF_CTRL, DATA_FORMAT_24_BIT); |
109 | else | 89 | else |
110 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_FORMAT_24_BIT; | 90 | BF_CLR(LCDIF_CTRL, DATA_FORMAT_24_BIT); |
111 | } | 91 | } |
112 | 92 | ||
113 | void imx233_lcdif_wait_ready(void) | 93 | void imx233_lcdif_wait_ready(void) |
114 | { | 94 | { |
115 | while(HW_LCDIF_CTRL & HW_LCDIF_CTRL__RUN); | 95 | while(BF_RD(LCDIF_CTRL, RUN)); |
116 | } | 96 | } |
117 | 97 | ||
118 | void imx233_lcdif_pio_send(bool data_mode, unsigned len, uint32_t *buf) | 98 | void imx233_lcdif_pio_send(bool data_mode, unsigned len, uint32_t *buf) |
@@ -120,10 +100,9 @@ void imx233_lcdif_pio_send(bool data_mode, unsigned len, uint32_t *buf) | |||
120 | unsigned max_xfer_size = 0xffff; | 100 | unsigned max_xfer_size = 0xffff; |
121 | if(len == 0) | 101 | if(len == 0) |
122 | return; | 102 | return; |
123 | if(lcdif_word_length == HW_LCDIF_CTRL__WORD_LENGTH_16_BIT) | 103 | if(lcdif_word_length == BV_LCDIF_CTRL_WORD_LENGTH__16_BIT) |
124 | max_xfer_size = 0x1fffe; | 104 | max_xfer_size = 0x1fffe; |
125 | imx233_lcdif_wait_ready(); | 105 | imx233_lcdif_wait_ready(); |
126 | unsigned msk = imx233_lcdif_enable_irqs(0); | ||
127 | imx233_lcdif_enable_bus_master(false); | 106 | imx233_lcdif_enable_bus_master(false); |
128 | 107 | ||
129 | do | 108 | do |
@@ -131,7 +110,7 @@ void imx233_lcdif_pio_send(bool data_mode, unsigned len, uint32_t *buf) | |||
131 | unsigned burst = MIN(len, max_xfer_size); | 110 | unsigned burst = MIN(len, max_xfer_size); |
132 | len -= burst; | 111 | len -= burst; |
133 | unsigned count = burst; | 112 | unsigned count = burst; |
134 | if(lcdif_word_length != HW_LCDIF_CTRL__WORD_LENGTH_8_BIT) | 113 | if(lcdif_word_length != BV_LCDIF_CTRL_WORD_LENGTH__8_BIT) |
135 | { | 114 | { |
136 | if(burst & 1) | 115 | if(burst & 1) |
137 | burst++; | 116 | burst++; |
@@ -141,20 +120,20 @@ void imx233_lcdif_pio_send(bool data_mode, unsigned len, uint32_t *buf) | |||
141 | count = burst; | 120 | count = burst; |
142 | HW_LCDIF_TRANSFER_COUNT = 0; | 121 | HW_LCDIF_TRANSFER_COUNT = 0; |
143 | HW_LCDIF_TRANSFER_COUNT = 0x10000 | count; | 122 | HW_LCDIF_TRANSFER_COUNT = 0x10000 | count; |
144 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_SELECT | HW_LCDIF_CTRL__RUN; | 123 | BF_CLR(LCDIF_CTRL, DATA_SELECT); |
124 | BF_CLR(LCDIF_CTRL, RUN); | ||
145 | if(data_mode) | 125 | if(data_mode) |
146 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_SELECT; | 126 | BF_SET(LCDIF_CTRL, DATA_SELECT); |
147 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__RUN; | 127 | BF_SET(LCDIF_CTRL, RUN); |
148 | burst = (burst + 3) / 4; | 128 | burst = (burst + 3) / 4; |
149 | while(burst-- > 0) | 129 | while(burst-- > 0) |
150 | { | 130 | { |
151 | while(HW_LCDIF_STAT & HW_LCDIF_STAT__LFIFO_FULL); | 131 | while(BF_RD(LCDIF_STAT, LFIFO_FULL)); |
152 | HW_LCDIF_DATA = *buf++; | 132 | HW_LCDIF_DATA = *buf++; |
153 | } | 133 | } |
154 | while(HW_LCDIF_CTRL & HW_LCDIF_CTRL__RUN); | 134 | imx233_lcdif_wait_ready(); |
155 | }while(len > 0); | 135 | }while(len > 0); |
156 | imx233_lcdif_enable_bus_master(true); | 136 | imx233_lcdif_enable_bus_master(true); |
157 | imx233_lcdif_enable_irqs(msk); | ||
158 | } | 137 | } |
159 | 138 | ||
160 | void imx233_lcdif_dma_send(void *buf, unsigned width, unsigned height) | 139 | void imx233_lcdif_dma_send(void *buf, unsigned width, unsigned height) |
@@ -162,7 +141,7 @@ void imx233_lcdif_dma_send(void *buf, unsigned width, unsigned height) | |||
162 | HW_LCDIF_CUR_BUF = (uint32_t)buf; | 141 | HW_LCDIF_CUR_BUF = (uint32_t)buf; |
163 | HW_LCDIF_TRANSFER_COUNT = 0; | 142 | HW_LCDIF_TRANSFER_COUNT = 0; |
164 | HW_LCDIF_TRANSFER_COUNT = (height << 16) | width; | 143 | HW_LCDIF_TRANSFER_COUNT = (height << 16) | width; |
165 | __REG_CLR(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__RUN; | 144 | BF_CLR(LCDIF_CTRL, RUN); |
166 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__DATA_SELECT; | 145 | BF_SET(LCDIF_CTRL, DATA_SELECT); |
167 | __REG_SET(HW_LCDIF_CTRL) = HW_LCDIF_CTRL__RUN; | 146 | BF_SET(LCDIF_CTRL, RUN); |
168 | } | 147 | } |
diff --git a/firmware/target/arm/imx233/lcdif-imx233.h b/firmware/target/arm/imx233/lcdif-imx233.h index 9902aaa80b..1aee72bce4 100644 --- a/firmware/target/arm/imx233/lcdif-imx233.h +++ b/firmware/target/arm/imx233/lcdif-imx233.h | |||
@@ -26,64 +26,7 @@ | |||
26 | #include "system.h" | 26 | #include "system.h" |
27 | #include "system-target.h" | 27 | #include "system-target.h" |
28 | 28 | ||
29 | #define HW_LCDIF_BASE 0x80030000 | 29 | #include "regs/regs-lcdif.h" |
30 | |||
31 | #define HW_LCDIF_CTRL (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x0)) | ||
32 | #define HW_LCDIF_CTRL__WORD_LENGTH_16_BIT (0 << 8) | ||
33 | #define HW_LCDIF_CTRL__WORD_LENGTH_8_BIT (1 << 8) | ||
34 | #define HW_LCDIF_CTRL__WORD_LENGTH_18_BIT (2 << 8) | ||
35 | #define HW_LCDIF_CTRL__WORD_LENGTH_24_BIT (3 << 8) | ||
36 | #define HW_LCDIF_CTRL__WORD_LENGTH_BM (3 << 8) | ||
37 | #define HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_16_BIT (0 << 10) | ||
38 | #define HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_18_BIT (2 << 10) | ||
39 | #define HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_BM (3 << 10) | ||
40 | #define HW_LCDIF_CTRL__LCDIF_MASTER (1 << 5) | ||
41 | #define HW_LCDIF_CTRL__DATA_FORMAT_16_BIT (1 << 3) | ||
42 | #define HW_LCDIF_CTRL__DATA_FORMAT_18_BIT (1 << 2) | ||
43 | #define HW_LCDIF_CTRL__DATA_FORMAT_24_BIT (1 << 1) | ||
44 | #define HW_LCDIF_CTRL__RUN 0x1 | ||
45 | #define HW_LCDIF_CTRL__DATA_SELECT (1 << 16) | ||
46 | |||
47 | #define HW_LCDIF_CTRL1 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x10)) | ||
48 | #define HW_LCDIF_CTRL1__RESET 1 | ||
49 | #define HW_LCDIF_CTRL1__BUSY_ENABLE (1 << 2) | ||
50 | #define HW_LCDIF_CTRL1__MODE86 (1 << 1) | ||
51 | #define HW_LCDIF_CTRL1__IRQ_EN_BP 12 | ||
52 | #define HW_LCDIF_CTRL1__IRQ_EN_BM (0xf << 12) | ||
53 | #define HW_LCDIF_CTRL1__IRQ_BP 8 | ||
54 | #define HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BM (0xf << 16) | ||
55 | #define HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BP 16 | ||
56 | #define HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW (1 << 24) | ||
57 | |||
58 | #define HW_LCDIF__VSYNC_EDGE_IRQ 1 | ||
59 | #define HW_LCDIF__CUR_FRAME_DONE_IRQ 2 | ||
60 | #define HW_LCDIF__UNDERFLOW_IRQ 4 | ||
61 | #define HW_LCDIF__OVERFLOW_IRQ 8 | ||
62 | |||
63 | #define HW_LCDIF_TRANSFER_COUNT (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x20)) | ||
64 | #define HW_LCDIF_CUR_BUF (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x30)) | ||
65 | #define HW_LCDIF_NEXT_BUF (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x40)) | ||
66 | #define HW_LCDIF_TIMING (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x60)) | ||
67 | #define HW_LCDIF_TIMING__DATA_SETUP_BP 0 | ||
68 | #define HW_LCDIF_TIMING__DATA_HOLD_BP 8 | ||
69 | #define HW_LCDIF_TIMING__CMD_SETUP_BP 16 | ||
70 | #define HW_LCDIF_TIMING__CMD_HOLD_BP 24 | ||
71 | |||
72 | #define HW_LCDIF_CSC_COEFF0 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x110)) | ||
73 | #define HW_LCDIF_CSC_COEFF1 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x120)) | ||
74 | #define HW_LCDIF_CSC_COEFF2 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x130)) | ||
75 | #define HW_LCDIF_CSC_COEFF3 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x140)) | ||
76 | #define HW_LCDIF_CSC_COEFF4 (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x150)) | ||
77 | #define HW_LCDIF_CSC_OFFSET (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x160)) | ||
78 | #define HW_LCDIF_CSC_LIMIT (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x170)) | ||
79 | #define HW_LCDIF_DATA (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x1b0)) | ||
80 | |||
81 | #define HW_LCDIF_STAT (*(volatile uint32_t *)(HW_LCDIF_BASE + 0x1d0)) | ||
82 | #define HW_LCDIF_STAT__LFIFO_FULL (1 << 29) | ||
83 | #define HW_LCDIF_STAT__LFIFO_EMPTY (1 << 28) | ||
84 | #define HW_LCDIF_STAT__TXFIFO_FULL (1 << 27) | ||
85 | #define HW_LCDIF_STAT__TXFIFO_EMPTY (1 << 26) | ||
86 | #define HW_LCDIF_STAT__BUSY (1 << 25) | ||
87 | 30 | ||
88 | void imx233_lcdif_enable_underflow_recover(bool enable); | 31 | void imx233_lcdif_enable_underflow_recover(bool enable); |
89 | void imx233_lcdif_enable_bus_master(bool enable); | 32 | void imx233_lcdif_enable_bus_master(bool enable); |
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c index 376673e675..cfb1a4e0a5 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c | |||
@@ -56,8 +56,8 @@ static enum lcd_kind_t | |||
56 | static void setup_parameters(void) | 56 | static void setup_parameters(void) |
57 | { | 57 | { |
58 | imx233_lcdif_reset(); | 58 | imx233_lcdif_reset(); |
59 | imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_18_BIT); | 59 | imx233_lcdif_set_lcd_databus_width(BV_LCDIF_CTRL_LCD_DATABUS_WIDTH__18_BIT); |
60 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); | 60 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__18_BIT); |
61 | imx233_lcdif_set_timings(1, 2, 2, 2); | 61 | imx233_lcdif_set_timings(1, 2, 2, 2); |
62 | imx233_lcdif_enable_underflow_recover(true); | 62 | imx233_lcdif_enable_underflow_recover(true); |
63 | } | 63 | } |
@@ -218,7 +218,7 @@ static void lcd_write_reg(uint32_t reg, uint32_t data) | |||
218 | uint32_t old_reg = reg; | 218 | uint32_t old_reg = reg; |
219 | imx233_lcdif_wait_ready(); | 219 | imx233_lcdif_wait_ready(); |
220 | /* get back to 18-bit word length */ | 220 | /* get back to 18-bit word length */ |
221 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); | 221 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__18_BIT); |
222 | reg = encode_16_to_18(reg); | 222 | reg = encode_16_to_18(reg); |
223 | data = encode_16_to_18(data); | 223 | data = encode_16_to_18(data); |
224 | 224 | ||
@@ -398,11 +398,11 @@ void lcd_init_device(void) | |||
398 | break; | 398 | break; |
399 | } | 399 | } |
400 | // reset device | 400 | // reset device |
401 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 401 | BF_SET(LCDIF_CTRL1, RESET); |
402 | mdelay(50); | 402 | mdelay(50); |
403 | __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 403 | BF_CLR(LCDIF_CTRL1, RESET); |
404 | mdelay(10); | 404 | mdelay(10); |
405 | __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RESET; | 405 | BF_SET(LCDIF_CTRL1, RESET); |
406 | 406 | ||
407 | switch(lcd_kind) | 407 | switch(lcd_kind) |
408 | { | 408 | { |
@@ -578,7 +578,7 @@ void lcd_update_rect(int x, int y, int w, int h) | |||
578 | lcd_write_reg(0x21, y); | 578 | lcd_write_reg(0x21, y); |
579 | lcd_write_reg(0x22, 0); | 579 | lcd_write_reg(0x22, 0); |
580 | imx233_lcdif_wait_ready(); | 580 | imx233_lcdif_wait_ready(); |
581 | imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_16_BIT); | 581 | imx233_lcdif_set_word_length(BV_LCDIF_CTRL_WORD_LENGTH__16_BIT); |
582 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ | 582 | imx233_lcdif_set_byte_packing_format(0xf); /* two pixels per 32-bit word */ |
583 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ | 583 | imx233_lcdif_set_data_format(false, false, false); /* RGB565, don't care, don't care */ |
584 | /* there are two cases here: | 584 | /* there are two cases here: |