Subversion Repositories freemyipod

Rev

Rev 378 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 378 Rev 388
Line 69... Line 69...
69
    return (PDAT6 & 0x30) >> 4;
69
    return (PDAT6 & 0x30) >> 4;
70
}
70
}
71
 
71
 
72
bool displaylcd_busy()
72
bool displaylcd_busy()
73
{
73
{
74
    return DMAC0C0CONFIG & 1;
74
    return DMAC0C4CONFIG & 1;
75
}
75
}
76
 
76
 
77
bool displaylcd_safe()
77
bool displaylcd_safe()
78
{
78
{
79
    return !(DMAC0C0CONFIG & 1);
79
    return !(DMAC0C4CONFIG & 1);
80
}
80
}
81
 
81
 
82
void displaylcd_sync()
82
void displaylcd_sync()
83
{
83
{
84
    while (displaylcd_busy()) sleep(100);
84
    while (displaylcd_busy()) sleep(100);
Line 124... Line 124...
124
    bool solid = (int)data == -1;
124
    bool solid = (int)data == -1;
125
    if (solid) lcd_color = color;
125
    if (solid) lcd_color = color;
126
    for (i = -1; i < (int)ARRAYLEN(lcd_lli) && pixels > 0; i++, pixels -= 0xfff)
126
    for (i = -1; i < (int)ARRAYLEN(lcd_lli) && pixels > 0; i++, pixels -= 0xfff)
127
    {
127
    {
128
        bool last = i + 1 >= ARRAYLEN(lcd_lli) || pixels <= 0xfff;
128
        bool last = i + 1 >= ARRAYLEN(lcd_lli) || pixels <= 0xfff;
129
        struct dma_lli* lli = i < 0 ? (struct dma_lli*)((int)&DMAC0C0LLI) : &lcd_lli[i];
129
        struct dma_lli* lli = i < 0 ? (struct dma_lli*)((int)&DMAC0C4LLI) : &lcd_lli[i];
130
        lli->srcaddr = solid ? &lcd_color : data;
130
        lli->srcaddr = solid ? &lcd_color : data;
131
        lli->dstaddr = (void*)((int)&LCDWDATA);
131
        lli->dstaddr = (void*)((int)&LCDWDATA);
132
        lli->nextlli = last ? NULL : &lcd_lli[i + 1];
132
        lli->nextlli = last ? NULL : &lcd_lli[i + 1];
133
        lli->control = 0x70240000 | (last ? pixels : 0xfff)
133
        lli->control = 0x70240000 | (last ? pixels : 0xfff)
134
                     | (last ? 0x80000000 : 0) | (solid ? 0 : 0x4000000);
134
                     | (last ? 0x80000000 : 0) | (solid ? 0 : 0x4000000);
135
        data = (void*)(((uint32_t)data) + 0x1ffe);
135
        data = (void*)(((uint32_t)data) + 0x1ffe);
136
    }
136
    }
137
    clean_dcache();
137
    clean_dcache();
138
    DMAC0C0CONFIG = 0x88c1;
138
    DMAC0C4CONFIG = 0x88c1;
139
}
139
}
140
 
140
 
141
void lcd_shutdown()
141
void lcd_shutdown()
142
{
142
{
143
    displaylcd_sync();
143
    displaylcd_sync();
Line 180... Line 180...
180
        lcd_send_cmd(0x10);
180
        lcd_send_cmd(0x10);
181
        sleep(50000);
181
        sleep(50000);
182
    }
182
    }
183
}
183
}
184
 
184
 
185
void INT_DMAC0C0()
185
void INT_DMAC0C4()
186
{
186
{
187
    DMAC0INTTCCLR = 1;
187
    DMAC0INTTCCLR = 0x10;
188
    lcdconsole_callback();
188
    lcdconsole_callback();
189
}
189
}
190
 
190
 
191
int lcd_translate_color(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue)
191
int lcd_translate_color(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue)
192
    ICODE_ATTR __attribute__((naked, noinline));
192
    ICODE_ATTR __attribute__((naked, noinline));