COBJS-$(CONFIG_VIDEO_SM501) += sm501.o
COBJS-$(CONFIG_VIDEO_SMI_LYNXEM) += smiLynxEM.o
COBJS-$(CONFIG_VIDEO_VCXK) += bus_vcxk.o
-COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p-fimd.o
+COBJS-$(CONFIG_S5PC1XXFB) += s5p-fb.o s5p-fimd.o s5p-spi.o
COBJS-$(CONFIG_S6E63M0) += s6e63m0.o
COBJS-$(CONFIG_S6D16A0X) += s6d16a0x.o
COBJS-$(CONFIG_AMS701KA) += ams701ka.o
--- /dev/null
+#include <asm/arch/gpio.h>
+#include "s5p-spi.h"
+
+
+static void cs_low(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->cs_bank, spi->cs_num, 0);
+}
+
+static void cs_high(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->cs_bank, spi->cs_num, 1);
+}
+
+static void clk_low(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->clk_bank, spi->clk_num, 0);
+}
+
+static void clk_high(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->clk_bank, spi->clk_num, 1);
+}
+
+static void si_low(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->si_bank, spi->si_num, 0);
+}
+
+static void si_high(struct spi_platform_data *spi)
+{
+ gpio_set_value(spi->si_bank, spi->si_num, 1);
+}
+
+static char so_read(struct spi_platform_data *spi)
+{
+ return gpio_get_value(spi->so_bank, spi->so_num);
+}
+
+void spi_write_byte(struct spi_platform_data *spi, unsigned char address, unsigned char command)
+{
+ int j;
+ unsigned short data;
+ unsigned char DELAY = 1;
+
+ data = (address << 8) + command;
+
+ cs_high(spi);
+ si_high(spi);
+ clk_high(spi);
+ udelay(DELAY);
+
+ cs_low(spi);
+ udelay(DELAY);
+
+ for (j = PACKET_LEN; j >= 0; j--)
+ {
+ clk_low(spi);
+
+ /* data high or low */
+ if ((data >> j) & 0x1)
+ si_high(spi);
+ else
+ si_low(spi);
+
+ udelay(DELAY);
+
+ clk_high(spi);
+ udelay(DELAY);
+ }
+
+ cs_high(spi);
+ udelay(DELAY);
+}
+
+#ifdef UNUSED_FUNCTIONS
+unsigned char spi_read_byte(struct spi_platform_data *spi, unsigned char select, unsigned char address)
+{
+ int j;
+ static unsigned int first = 1;
+ unsigned char DELAY = 1;
+ unsigned short data = 0;
+ char command = 0;
+
+ data = (select << 8) + address;
+
+ cs_high(spi);
+ si_high(spi);
+ clk_high(spi);
+ udelay(DELAY);
+
+ clk_low(spi);
+ udelay(DELAY);
+
+ for (j = PACKET_LEN + 8; j >= 0; j--)
+ {
+
+ if (j > 7) {
+ clk_low(spi);
+
+ /* data high or low */
+ if ((data >> (j - 8)) & 0x1)
+ si_high(spi);
+ else
+ si_low(spi);
+
+ udelay(DELAY);
+ clk_high(spi);
+ } else {
+ if (first) {
+ gpio_cfg_pin(spi->so_bank, spi->so_num, GPIO_INPUT);
+ first = 0;
+ }
+
+ clk_low(spi);
+
+ if (so_read(spi) & 0x1)
+ command |= 1 << j;
+ else
+ command |= 0 << j;
+
+ udelay(DELAY);
+ clk_high(spi);
+ }
+
+ udelay(DELAY);
+ }
+
+ cs_high(spi);
+ udelay(DELAY);
+
+ gpio_cfg_pin(spi->so_bank, spi->so_num, GPIO_OUTPUT);
+
+ return command;
+}
+#endif
-
#define COMMAND_ONLY 0xFE
#define DATA_ONLY 0xFF
-
#define PACKET_LEN 8
struct spi_platform_data {
unsigned int set_rev;
};
+void spi_write_byte(struct spi_platform_data *spi,
+ unsigned char address, unsigned char command);
+void spi_read_byte(struct spi_platform_data *spi,
+ unsigned char address, unsigned char command);
/* these machine specific platform data would be setting at universal.c */
struct spi_platform_data *s6d16a0x;
-void cs_low_(void)
-{
- gpio_set_value(s6d16a0x->cs_bank, s6d16a0x->cs_num, 0);
-}
-
-void cs_high_(void)
-{
- gpio_set_value(s6d16a0x->cs_bank, s6d16a0x->cs_num, 1);
-}
-
-void clk_low_(void)
-{
- gpio_set_value(s6d16a0x->clk_bank, s6d16a0x->clk_num, 0);
-}
-
-void clk_high_(void)
-{
- gpio_set_value(s6d16a0x->clk_bank, s6d16a0x->clk_num, 1);
-}
-
-void si_low_(void)
-{
- gpio_set_value(s6d16a0x->si_bank, s6d16a0x->si_num, 0);
-}
-
-void si_high_(void)
-{
- gpio_set_value(s6d16a0x->si_bank, s6d16a0x->si_num, 1);
-}
-
-char so_read_(void)
-{
- return gpio_get_value(s6d16a0x->so_bank, s6d16a0x->so_num);
-}
-
static const unsigned char SEQ_PASSWD2_SET[] = {
0xF1, 0x5A,
DATA_ONLY, 0x5A,
0x28, COMMAND_ONLY,
};
-unsigned char Delay=1;
-
-static void s6d16a0x_c110_spi_write_byte(unsigned char address, unsigned char command)
-{
- int j;
- unsigned short data;
- data = (address << 8) + command;
-
- cs_high_();
- si_high_();
- clk_high_();
- udelay(Delay);
-
- cs_low_();
- udelay(Delay);
-
- for (j = PACKET_LEN; j >= 0; j--)
- {
- clk_low_();
-
- /* data high or low */
- if ((data >> j) & 0x0001)
- si_high_();
- else
- si_low_();
-
- udelay(Delay);
-
- clk_high_();
- udelay(Delay);
- }
-
- cs_high_();
- udelay(Delay);
-}
-
-#ifdef UNUSED_FUNCTIONS
-static unsigned char s6d16a0x_c110_spi_read_byte(unsigned char select, unsigned char address)
-{
- int j;
- static unsigned int first = 1;
- unsigned char DELAY=1;
- unsigned short data = 0;
- char command = 0;
-
- data = (select << 8) + address;
-
- cs_high();
- si_high();
- clk_high();
- udelay(DELAY);
-
- clk_low();
- udelay(DELAY);
-
- for (j = PACKET_LEN + 8; j >= 0; j--)
- {
-
- if (j > 7) {
- clk_low();
-
- /* data high or low */
- if ((data >> (j - 8)) & 0x0001)
- si_high();
- else
- si_low();
-
- udelay(DELAY);
- clk_high();
- } else {
- if (first) {
- gpio_cfg_pin(s6d16a0x->so_bank, s6d16a0x->so_num, GPIO_INPUT);
- first = 0;
- }
-
- clk_low();
-
- if (so_read() & 0x1)
- command |= 1 << j;
- else
- command |= 0 << j;
-
- udelay(DELAY);
- clk_high();
- }
-
- udelay(DELAY);
- }
-
- cs_high();
- udelay(DELAY);
-
- gpio_cfg_pin(s6d16a0x->so_bank, s6d16a0x->so_num, GPIO_OUTPUT);
-
- return command;
-}
-#endif
-
static void s6d16a0x_spi_write(unsigned char address, unsigned char command)
{
if (address != DATA_ONLY)
- s6d16a0x_c110_spi_write_byte(0x0, address);
+ spi_write_byte(s6d16a0x, 0x0, address);
if (command != COMMAND_ONLY)
- s6d16a0x_c110_spi_write_byte(0x1, command);
+ spi_write_byte(s6d16a0x, 0x1, command);
}
static void s6d16a0x_panel_send_sequence(const unsigned char *wbuf, unsigned int size_cmd)
#include "s5p-spi.h"
-unsigned int size_cmd;
/* these machine specific platform data would be setting at universal.c */
struct spi_platform_data *s6e63m0;
-void cs_low(void)
-{
- gpio_set_value(s6e63m0->cs_bank, s6e63m0->cs_num, 0);
-}
-
-void cs_high(void)
-{
- gpio_set_value(s6e63m0->cs_bank, s6e63m0->cs_num, 1);
-}
-
-void clk_low(void)
-{
- gpio_set_value(s6e63m0->clk_bank, s6e63m0->clk_num, 0);
-}
-
-void clk_high(void)
-{
- gpio_set_value(s6e63m0->clk_bank, s6e63m0->clk_num, 1);
-}
-
-void si_low(void)
-{
- gpio_set_value(s6e63m0->si_bank, s6e63m0->si_num, 0);
-}
-
-void si_high(void)
-{
- gpio_set_value(s6e63m0->si_bank, s6e63m0->si_num, 1);
-}
-
-char so_read(void)
-{
- return gpio_get_value(s6e63m0->so_bank, s6e63m0->so_num);
-}
-
static const unsigned char SEQ_PANEL_CONDITION_SET[] = {
0xF8, 0x01,
DATA_ONLY, 0x27,
0x29, COMMAND_ONLY,
};
-unsigned char DELAY=1;
-
-static void s6e63m0_c110_spi_write_byte(unsigned char address, unsigned char command)
-{
- int j;
- unsigned short data;
-
- data = (address << 8) + command;
-
- cs_high();
- si_high();
- clk_high();
- udelay(DELAY);
-
- cs_low();
- udelay(DELAY);
-
- for (j = PACKET_LEN; j >= 0; j--)
- {
- clk_low();
-
- /* data high or low */
- if ((data >> j) & 0x0001)
- si_high();
- else
- si_low();
-
- udelay(DELAY);
-
- clk_high();
- udelay(DELAY);
- }
-
- cs_high();
- udelay(DELAY);
-}
-
-#ifdef UNUSED_FUNCTION
-static unsigned char s6e63m0_c110_spi_read_byte(unsigned char select, unsigned char address)
-{
- int j;
- static unsigned int first = 1;
- unsigned char DELAY=1;
- unsigned short data = 0;
- char command = 0;
-
- data = (select << 8) + address;
-
- cs_high();
- si_high();
- clk_high();
- udelay(DELAY);
-
- clk_low();
- udelay(DELAY);
-
- for (j = PACKET_LEN + 8; j >= 0; j--)
- {
-
- if (j > 7) {
- clk_low();
-
- /* data high or low */
- if ((data >> (j - 8)) & 0x0001)
- si_high();
- else
- si_low();
-
- udelay(DELAY);
- clk_high();
- } else {
- if (first) {
- gpio_cfg_pin(s6e63m0->so_bank, s6e63m0->so_num, GPIO_INPUT);
- first = 0;
- }
-
- clk_low();
-
- if (so_read() & 0x1)
- command |= 1 << j;
- else
- command |= 0 << j;
-
- udelay(DELAY);
- clk_high();
- }
-
- udelay(DELAY);
- }
-
- cs_high();
- udelay(DELAY);
-
- gpio_cfg_pin(s6e63m0->so_bank, s6e63m0->so_num, GPIO_OUTPUT);
-
- return command;
-}
-#endif
-
static void s6e63m0_spi_write(unsigned char address, unsigned char command)
{
if (address != DATA_ONLY)
- s6e63m0_c110_spi_write_byte(0x0, address);
+ spi_write_byte(s6e63m0, 0x0, address);
if (command != COMMAND_ONLY)
- s6e63m0_c110_spi_write_byte(0x1, command);
+ spi_write_byte(s6e63m0, 0x1, command);
}
static void s6e63m0_panel_send_sequence(const unsigned char *wbuf, unsigned size_cmd)