Subversion Repositories freemyipod

Rev

Rev 881 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
881 theseven 1
#include "global.h"
2
#include "board/ipodclassic/lcd.h"
3
#include "interface/lcd/lcd.h"
4
#include "interface/lcdif/lcdif.h"
5
#include "interface/backlight_manager/backlight_manager.h"
6
#include "soc/s5l87xx/regs.h"
7
 
8
 
9
static void ipcl_lcd_send_cmd(const struct lcdif_instance* interface, int cmd)
10
{
11
    interface->driver->send_cmd(interface, cmd);
12
}
13
 
14
static void ipcl_lcd_send_data(const struct lcdif_instance* interface, int data)
15
{
926 user890104 16
    data = (data & 0xff) | ((data & 0x7f00) << 1);
881 theseven 17
    interface->driver->send_data(interface, data);
18
}
19
 
20
static void ipcl_lcd_init(const struct lcd_instance* instance)
21
{
22
    const struct ipodclassic_lcd_config* data = (const struct ipodclassic_lcd_config*)instance->driver_config;
23
    data->interface->driver->init(data->interface);
24
    if (data->backlight) data->backlight->driver->init(data->backlight);
25
}
26
 
27
enum framebuffer_format ipcl_lcd_get_native_format(const struct lcd_instance* instance)
28
{
29
    return FRAMEBUFFER_FORMAT_R5G6B5_LE;
30
}
31
 
32
static void ipcl_lcd_power(const struct lcd_instance* instance, bool on)
33
{
34
}
35
 
36
static void ipcl_lcd_backlight(const struct lcd_instance* instance, int brightness)
37
{
38
    const struct ipodclassic_lcd_config* data = (const struct ipodclassic_lcd_config*)instance->driver_config;
39
    if (!data->backlight) return;
40
    data->backlight->driver->set_brightness(data->backlight, brightness);
41
}
42
 
43
static void ipcl_lcd_setup_range(const struct lcd_instance* instance, int x, int y, int w, int h)
44
{
45
    const struct ipodclassic_lcd_config* data = (const struct ipodclassic_lcd_config*)instance->driver_config;
46
    const struct lcdif_instance* interface = data->interface;
47
    int type = (PDAT6 & 0x30) >> 4;
48
    if (type & 2)
49
    {
50
        ipcl_lcd_send_cmd(interface, 0x210);
51
        ipcl_lcd_send_data(interface, x);
52
        ipcl_lcd_send_cmd(interface, 0x211);
53
        ipcl_lcd_send_data(interface, x + w - 1);
54
        ipcl_lcd_send_cmd(interface, 0x212);
55
        ipcl_lcd_send_data(interface, y);
56
        ipcl_lcd_send_cmd(interface, 0x213);
57
        ipcl_lcd_send_data(interface, y + h - 1);
58
        ipcl_lcd_send_cmd(interface, 0x200);
59
        ipcl_lcd_send_data(interface, x);
60
        ipcl_lcd_send_cmd(interface, 0x201);
61
        ipcl_lcd_send_data(interface, y);
62
        ipcl_lcd_send_cmd(interface, 0x202);
63
    }
64
    else
65
    {
66
        ipcl_lcd_send_cmd(interface, 0x2a);
67
        ipcl_lcd_send_data(interface, x >> 8);
68
        ipcl_lcd_send_data(interface, x & 0xff);
69
        ipcl_lcd_send_data(interface, (x + w - 1) >> 8);
70
        ipcl_lcd_send_data(interface, (x + w - 1) & 0xff);
71
        ipcl_lcd_send_cmd(interface, 0x2b);
72
        ipcl_lcd_send_data(interface, y >> 8);
73
        ipcl_lcd_send_data(interface, y & 0xff);
74
        ipcl_lcd_send_data(interface, (y + h - 1) >> 8);
75
        ipcl_lcd_send_data(interface, (y + h - 1) & 0xff);
76
        ipcl_lcd_send_cmd(interface, 0x2c);
77
    }
78
}
79
 
80
static void ipcl_lcd_fill_pixels(const struct lcd_instance* instance, uint32_t color, int count)
81
{
82
    const struct ipodclassic_lcd_config* data = (const struct ipodclassic_lcd_config*)instance->driver_config;
83
    const struct lcdif_instance* interface = data->interface;
84
    interface->driver->send_repeat(interface, color, count);
85
}
86
 
87
static void ipcl_lcd_blit_pixels(const struct lcd_instance* instance, void* buffer, int count)
88
{
89
    const struct ipodclassic_lcd_config* data = (const struct ipodclassic_lcd_config*)instance->driver_config;
90
    const struct lcdif_instance* interface = data->interface;
91
    interface->driver->send_bulk(interface, buffer, count);
92
}
93
 
94
 
95
const struct lcd_driver ipodclassic_lcd_driver =
96
{
97
    .init = ipcl_lcd_init,
98
    .get_native_format = ipcl_lcd_get_native_format,
99
    .power = ipcl_lcd_power,
100
    .backlight = ipcl_lcd_backlight,
101
    .setup_range = ipcl_lcd_setup_range,
102
    .fill_pixels = ipcl_lcd_fill_pixels,
103
    .blit_pixels = ipcl_lcd_blit_pixels,
104
};