gpio_set_value(POWER_PIN, 0);/*power down*/
}
+void lcd_set_iomux(u8 enable)
+{
+ int ret=-1;
+
+ if(enable)
+ {
+ rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
+ ret = gpio_request(RK2818_PIN_PA4, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PA4);
+ printk(">>>>>> lcd cs gpio_request err \n ");
+ goto pin_err;
+ }
+
+ rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);
+
+ ret = gpio_request(RK2818_PIN_PE7, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE7);
+ printk(">>>>>> lcd clk gpio_request err \n ");
+ goto pin_err;
+ }
+
+ ret = gpio_request(RK2818_PIN_PE6, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE6);
+ printk(">>>>>> lcd txd gpio_request err \n ");
+ goto pin_err;
+ }
+ }
+ else
+ {
+ gpio_free(RK2818_PIN_PA4);
+ rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
+
+ gpio_free(RK2818_PIN_PE7);
+ gpio_free(RK2818_PIN_PE6);
+ rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
+ }
+ return ;
+pin_err:
+ return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+ .pin_txd = RK2818_PIN_PE6,
+ .pin_clk = RK2818_PIN_PE7,
+ .pin_cs = RK2818_PIN_PA4,
+ .screen_set_iomux = lcd_set_iomux,
+};
+
+// adc ---> key
+static ADC_keyst gAdcValueTab[] =
+{
+ {95, AD2KEY1},///VOLUME_DOWN
+ {192, AD2KEY2},///VOLUME_UP
+ {280, AD2KEY3},///MENU
+ {376, AD2KEY4},///HOME
+ {467, AD2KEY5},///BACK
+ {560, AD2KEY6},///CALL
+ {0,0}
+};
+
+struct adc_key_data rk2818_adc_key = {
+ .pin_playon = RK2818_PIN_PA3,
+ .playon_level = 1,
+ .adc_empty = 900,
+ .adc_invalid = 20,
+ .adc_drift = 50,
+ .adc_chn = 1,
+ .adc_key_table = gAdcValueTab,
+};
+
static void __init machine_rk2818_init_irq(void)
{
rk2818_init_irq();
gpio_set_value(POWER_PIN, 0);/*power down*/
}
+void lcd_set_iomux(u8 enable)
+{
+ int ret=-1;
+
+ if(enable)
+ {
+ rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
+ ret = gpio_request(RK2818_PIN_PA4, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PA4);
+ printk(">>>>>> lcd cs gpio_request err \n ");
+ goto pin_err;
+ }
+
+ rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);
+
+ ret = gpio_request(RK2818_PIN_PE7, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE7);
+ printk(">>>>>> lcd clk gpio_request err \n ");
+ goto pin_err;
+ }
+
+ ret = gpio_request(RK2818_PIN_PE6, NULL);
+ if(0)//(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE6);
+ printk(">>>>>> lcd txd gpio_request err \n ");
+ goto pin_err;
+ }
+ }
+ else
+ {
+ gpio_free(RK2818_PIN_PA4);
+ rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
+
+ gpio_free(RK2818_PIN_PE7);
+ gpio_free(RK2818_PIN_PE6);
+ rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
+ }
+ return ;
+pin_err:
+ return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+ .pin_txd = RK2818_PIN_PE6,
+ .pin_clk = RK2818_PIN_PE7,
+ .pin_cs = RK2818_PIN_PA4,
+ .screen_set_iomux = lcd_set_iomux,
+};
+
+// adc ---> key
+static ADC_keyst gAdcValueTab[] =
+{
+ {95, AD2KEY1},///VOLUME_DOWN
+ {192, AD2KEY2},///VOLUME_UP
+ {280, AD2KEY3},///MENU
+ {376, AD2KEY4},///HOME
+ {467, AD2KEY5},///BACK
+ {560, AD2KEY6},///CALL
+ {0,0}
+};
+
+struct adc_key_data rk2818_adc_key = {
+ .pin_playon = RK2818_PIN_PA3,
+ .playon_level = 1,
+ .adc_empty = 900,
+ .adc_invalid = 20,
+ .adc_drift = 50,
+ .adc_chn = 1,
+ .adc_key_table = gAdcValueTab,
+};
+
static void __init machine_rk2818_init_irq(void)
{
rk2818_init_irq();
gpio_set_value(POWER_PIN, 0);/*power down*/
}
+void lcd_set_iomux(u8 enable)
+{
+ int ret=-1;
+
+ if(enable)
+ {
+ rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 0);
+ ret = gpio_request(RK2818_PIN_PH6, NULL);
+ if(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PH6);
+ printk(">>>>>> lcd cs gpio_request err \n ");
+ goto pin_err;
+ }
+
+ rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 1);
+
+ ret = gpio_request(RK2818_PIN_PE4, NULL);
+ if(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE4);
+ printk(">>>>>> lcd clk gpio_request err \n ");
+ goto pin_err;
+ }
+
+ ret = gpio_request(RK2818_PIN_PE5, NULL);
+ if(ret != 0)
+ {
+ gpio_free(RK2818_PIN_PE5);
+ printk(">>>>>> lcd txd gpio_request err \n ");
+ goto pin_err;
+ }
+ }
+ else
+ {
+ gpio_free(RK2818_PIN_PH6);
+ rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 1);
+
+ gpio_free(RK2818_PIN_PE4);
+ gpio_free(RK2818_PIN_PE5);
+ rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 0);
+ }
+ return ;
+pin_err:
+ return ;
+
+}
+
+struct lcd_td043mgea1_data lcd_td043mgea1 = {
+ .pin_txd = RK2818_PIN_PE4,
+ .pin_clk = RK2818_PIN_PE5,
+ .pin_cs = RK2818_PIN_PH6,
+ .screen_set_iomux = lcd_set_iomux,
+};
+
+// adc ---> key
+static ADC_keyst gAdcValueTab[] =
+{
+ {0x5c, AD2KEY1},///VOLUME_DOWN
+ {0xbf, AD2KEY2},///VOLUME_UP
+ {0x115, AD2KEY3},///MENU
+ {0x177, AD2KEY4},///HOME
+ {0x1d3, AD2KEY5},///BACK
+ {0x290, AD2KEY6},///CALL
+ {0x230, AD2KEY7},///SEARCH
+ {0, 0}///table end
+};
+
+struct adc_key_data rk2818_adc_key = {
+ .pin_playon = RK2818_PIN_PA3,
+ .playon_level = 1,
+ .adc_empty = 927,
+ .adc_invalid = 20,
+ .adc_drift = 50,
+ .adc_chn = 1,
+ .adc_key_table = gAdcValueTab,
+};
+
static void __init machine_rk2818_init_irq(void)
{
rk2818_init_irq();
int (*teardown)(struct i2c_client *client,unsigned gpio, unsigned ngpio,void *context);
char **names;
};
+
+/*lcd*/
+struct lcd_td043mgea1_data{
+ u32 pin_txd;
+ u32 pin_clk;
+ u32 pin_cs;
+ void (*screen_set_iomux)(u8 enable);
+};
+
+//ROCKCHIP AD KEY CODE ,for demo board
+// key ---> EV
+#define AD2KEY1 114 ///VOLUME_DOWN
+#define AD2KEY2 115 ///VOLUME_UP
+#define AD2KEY3 59 ///MENU
+#define AD2KEY4 102 ///HOME
+#define AD2KEY5 158 ///BACK
+#define AD2KEY6 61 ///CALL
+#define AD2KEY7 127 ///SEARCH
+#define ENDCALL 62
+#define KEYSTART 28 //ENTER
+#define KEYMENU AD2KEY6 ///CALL
+#define KEY_PLAY_SHORT_PRESS KEYSTART //code for short press the play key
+#define KEY_PLAY_LONG_PRESS ENDCALL //code for long press the play key
+
+//ADC Registers
+typedef struct tagADC_keyst
+{
+ unsigned int adc_value;
+ unsigned int adc_keycode;
+}ADC_keyst,*pADC_keyst;
+
+/*ad key*/
+struct adc_key_data{
+ u32 pin_playon;
+ u32 playon_level;
+ u32 adc_empty;
+ u32 adc_invalid;
+ u32 adc_drift;
+ u32 adc_chn;
+ ADC_keyst * adc_key_table;
+};
+
/* common init routines for use by arch/arm/mach-msm/board-*.c */
void __init rk2818_add_devices(void);
void __init rk2818_map_common_io(void);
}
else
{
- dev_info(i2c->dev, "Scl_rate(%uKhz) is failed to change[0 -- 400Khz], current rate(%luKhz)\n",
- msgs[0].scl_rate/1000, i2c->scl_rate/1000);
+ //dev_info(i2c->dev, "Scl_rate(%uKhz) is failed to change[0 -- 400Khz], current rate(%luKhz)\n",
+ // msgs[0].scl_rate/1000, i2c->scl_rate/1000);
+ i2c->scl_rate = 400000;
}
ret = rk2818_i2c_init_hw(i2c);
#include <asm/mach/map.h>
#include <mach/gpio.h>
#include <mach/adc.h>
+#include <mach/board.h>
-#if 0
+extern struct adc_key_data rk2818_adc_key;
+
+#if 0
#define DBG(x...) printk(x)
#else
#define DBG(x...)
#endif
-//ROCKCHIP AD KEY CODE ,for demo board
-// key ---> EV
-#define AD2KEY1 114 ///VOLUME_DOWN
-#define AD2KEY2 115 ///VOLUME_UP
-#define AD2KEY3 59 ///MENU
-#define AD2KEY4 102 ///HOME
-#define AD2KEY5 158 ///BACK
-#define AD2KEY6 61 ///CALL
-
-#define ENDCALL 62
-#define KEYSTART 28 //ENTER
-#define KEYMENU AD2KEY6 ///CALL
-#ifndef CONFIG_MACH_RK2818PHONE
-#define KEY_PLAYON_PIN RK2818_PIN_PE1
-#else
-#define KEY_PLAYON_PIN RK2818_PIN_PA3
-#endif
-#define KEY_PLAY_SHORT_PRESS KEYSTART //code for short press the play key
-#define KEY_PLAY_LONG_PRESS ENDCALL //code for long press the play key
-
-
-#define Valuedrift 50
-#ifndef CONFIG_MACH_RK2818PHONE
-#define ADEmpty 1000
-#else
-#define ADEmpty 900
-#endif
-#define ADInvalid 20
-#define ADKEYNUM 10
-
-#define ADKEYCH 1 //ADͨµÀ
-#ifndef CONFIG_MACH_RK2818PHONE
-#define KEYPLAY_ON 0 //°´¼ü½ÓͨʱµÄµçƽֵ
-#else
-#define KEYPLAY_ON 1 //°´¼ü½ÓͨʱµÄµçƽֵ
-#endif
#define KEY_PHYS_NAME "rk2818_adckey/input0"
volatile int gADSampleTimes = 0;
volatile int gStatePlaykey = 0;
-
volatile unsigned int gCodeCount = 0;
volatile unsigned int gThisCode = 0;
volatile unsigned int gLastCode = 0;
volatile unsigned int gFlagShortPlay = 0;
volatile unsigned int gFlagLongPlay = 0;
volatile unsigned int gPlayCount = 0;
-//ADC Registers
-typedef struct tagADC_keyst
-{
- unsigned int adc_value;
- unsigned int adc_keycode;
-}ADC_keyst,*pADC_keyst;
-
-#ifndef CONFIG_MACH_RK2818PHONE
-// adc ---> key
-static ADC_keyst gAdcValueTab[] =
-{
- {95, AD2KEY1},
- {249, AD2KEY2},
- {406, AD2KEY3},
- {561, AD2KEY4},
- {726, AD2KEY5},
- {899, AD2KEY6},
- {ADEmpty,0}
-};
-#else
-static ADC_keyst gAdcValueTab[] =
-{
- {95, AD2KEY1},
- {192, AD2KEY2},
- {280, AD2KEY3},
- {376, AD2KEY4},
- {467, AD2KEY5},
- {560, AD2KEY6},
- {ADEmpty,0}
-};
-#endif
//key code tab
+#define ADKEYNUM 10
static unsigned char gInitKeyCode[ADKEYNUM] =
{
AD2KEY1,AD2KEY2,AD2KEY3,AD2KEY4,AD2KEY5,AD2KEY6,
unsigned int rk28_get_keycode(unsigned int advalue,pADC_keyst ptab)
{
- while(ptab->adc_value != ADEmpty)
+ while(ptab->adc_value != 0)
{
- if((advalue > ptab->adc_value - Valuedrift) && (advalue < ptab->adc_value + Valuedrift))
+ if((advalue > ptab->adc_value - rk2818_adc_key.adc_drift) && (advalue < ptab->adc_value + rk2818_adc_key.adc_drift))
return ptab->adc_keycode;
ptab++;
}
return 0;
}
-#if 1
static irqreturn_t rk28_playkey_irq(int irq, void *handle)
{
return IRQ_HANDLED;
}
-#endif
void rk28_send_wakeup_key( void )
{
input_report_key(pRk28AdcKey->input_dev,KEY_WAKEUP,1);
add_timer(&pRk28AdcKey->timer);
/*handle long press of play key*/
- if(gpio_get_value(KEY_PLAYON_PIN) == KEYPLAY_ON)
+ if(gpio_get_value(rk2818_adc_key.pin_playon) == rk2818_adc_key.playon_level)
{
if(++gPlayCount > 20000)
gPlayCount = 101;
gFlagLongPlay = 0;
gPlayCount = 0;
}
-
/*handle long press of adc key*/
if (gADSampleTimes < 4)
gADSampleTimes = 0;
//rk28_read_adc(pRk28AdcKey);
- adcvalue = gAdcValue[ADKEYCH];
+ adcvalue = gAdcValue[rk2818_adc_key.adc_chn];
DBG("=========== adcvalue=0x%x ===========\n",adcvalue);
- if((adcvalue > ADEmpty) || (adcvalue < ADInvalid))
+ if((adcvalue > rk2818_adc_key.adc_empty) || (adcvalue < rk2818_adc_key.adc_invalid))
{
if(gLastCode == 0) {
return;
//DBG("adcvalue=0x%x\n",adcvalue);
- code=rk28_get_keycode(adcvalue,gAdcValueTab);
+ code=rk28_get_keycode(adcvalue,rk2818_adc_key.adc_key_table);
if(code)
{
if(code == KEYMENU)
dev_err(&pdev->dev, "failed to register input device\n");
goto failed_free_dev;
}
-
- error = gpio_request(KEY_PLAYON_PIN, "play key gpio");
+
+ error = gpio_request(rk2818_adc_key.pin_playon, "play key gpio");
if (error) {
dev_err(&pdev->dev, "failed to request play key gpio\n");
goto free_gpio;
}
-#if KEYPLAY_ON
- gpio_pull_updown(KEY_PLAYON_PIN,GPIOPullDown);
- error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk28_playkey_irq,IRQF_TRIGGER_RISING,NULL,NULL);
- if(error)
- {
- printk("unable to request play key irq\n");
- goto free_gpio_irq;
- }
-#else
- gpio_pull_updown(KEY_PLAYON_PIN,GPIOPullUp);
- error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk28_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);
- if(error)
- {
- printk("unable to request play key irq\n");
- goto free_gpio_irq;
- }
-#endif
-
- enable_irq_wake(gpio_to_irq(KEY_PLAYON_PIN)); // so play/wakeup key can wake up system
-
+ if(rk2818_adc_key.playon_level)
+ {
+ gpio_pull_updown(rk2818_adc_key.pin_playon,GPIOPullDown);
+ error = request_irq(gpio_to_irq(rk2818_adc_key.pin_playon),rk28_playkey_irq,IRQF_TRIGGER_RISING,NULL,NULL);
+ if(error)
+ {
+ printk("unable to request play key irq\n");
+ goto free_gpio_irq;
+ }
+ }
+ else
+ {
+ gpio_pull_updown(rk2818_adc_key.pin_playon,GPIOPullUp);
+ error = request_irq(gpio_to_irq(rk2818_adc_key.pin_playon),rk28_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);
+ if(error)
+ {
+ printk("unable to request play key irq\n");
+ goto free_gpio_irq;
+ }
+ }
+
+ enable_irq_wake(gpio_to_irq(rk2818_adc_key.pin_playon)); // so play/wakeup key can wake up system
#if 0
- error = gpio_direction_input(KEY_PLAYON_PIN);
+ error = gpio_direction_input(rk2818_adc_key.pin_playon);
if (error)
{
- printk("failed to set gpio KEY_PLAYON_PIN input\n");
+ printk("failed to set gpio rk2818_adc_key.pin_playon input\n");
goto free_gpio_irq;
}
#endif
return 0;
free_gpio_irq:
- free_irq(gpio_to_irq(KEY_PLAYON_PIN),NULL);
+ free_irq(gpio_to_irq(rk2818_adc_key.pin_playon),NULL);
free_gpio:
- gpio_free(KEY_PLAYON_PIN);
+ gpio_free(rk2818_adc_key.pin_playon);
failed_free_dev:
platform_set_drvdata(pdev, NULL);
input_free_device(input_dev);
input_free_device(adckey->input_dev);
platform_set_drvdata(pdev, NULL);
kfree(adckey);
- free_irq(gpio_to_irq(KEY_PLAYON_PIN),NULL);
- gpio_free(KEY_PLAYON_PIN);
-
+ free_irq(gpio_to_irq(rk2818_adc_key.pin_playon),NULL);
+ gpio_free(rk2818_adc_key.pin_playon);
return 0;
}
#include <mach/gpio.h>
#include <mach/iomux.h>
#include "screen.h"
+#include <mach/board.h>
+extern struct lcd_td043mgea1_data lcd_td043mgea1;
/* Base */
#define OUT_TYPE SCREEN_RGB
int standby(u8 enable);
void set_lcd_info(struct rk28fb_screen *screen);
+#define TXD_PORT lcd_td043mgea1.pin_txd
+#define CLK_PORT lcd_td043mgea1.pin_clk
+#define CS_PORT lcd_td043mgea1.pin_cs
+
+#define CS_OUT() gpio_direction_output(CS_PORT, 0)
+#define CS_SET() gpio_set_value(CS_PORT, GPIO_HIGH)
+#define CS_CLR() gpio_set_value(CS_PORT, GPIO_LOW)
+#define CLK_OUT() gpio_direction_output(CLK_PORT, 0)
+#define CLK_SET() gpio_set_value(CLK_PORT, GPIO_HIGH)
+#define CLK_CLR() gpio_set_value(CLK_PORT, GPIO_LOW)
+#define TXD_OUT() gpio_direction_output(TXD_PORT, 0)
+#define TXD_SET() gpio_set_value(TXD_PORT, GPIO_HIGH)
+#define TXD_CLR() gpio_set_value(TXD_PORT, GPIO_LOW)
+
+#if 0
static void screen_set_iomux(u8 enable)
{
int ret=-1;
return ;
}
-void set_lcd_info(struct rk28fb_screen *screen)
-{
- printk("lcd_hx8357 set_lcd_info \n");
- /* screen type & face */
- screen->type = OUT_TYPE;
- screen->face = OUT_FACE;
-
- /* Screen size */
- screen->x_res = H_VD;
- screen->y_res = V_VD;
-
- /* Timing */
- screen->pixclock = OUT_CLK;
- screen->left_margin = H_BP; /*>2*/
- screen->right_margin = H_FP; /*>2*/
- screen->hsync_len = H_PW; /*>2*/ //***all > 326, 4<PW+BP<15,
- screen->upper_margin = V_BP; /*>2*/
- screen->lower_margin = V_FP; /*>2*/
- screen->vsync_len = V_PW; /*>6*/
-
- /* Pin polarity */
- screen->pin_hsync = 0;
- screen->pin_vsync = 0;
- screen->pin_den = 0;
- screen->pin_dclk = DCLK_POL;
-
- /* Swap rule */
- screen->swap_rb = SWAP_RB;
- screen->swap_rg = 0;
- screen->swap_gb = 0;
- screen->swap_delta = 0;
- screen->swap_dumy = 0;
-
- /* Operation function*/
- screen->init = init;
- screen->standby = standby;
-}
+#endif
void spi_screenreg_set(u32 Addr, u32 Data)
{
-#define CS_OUT() gpio_direction_output(RK2818_PIN_PH6, GPIO_OUT)
-#define CS_SET() gpio_set_value(RK2818_PIN_PH6, GPIO_HIGH)
-#define CS_CLR() gpio_set_value(RK2818_PIN_PH6, GPIO_LOW)
-#define CLK_OUT() gpio_direction_output(RK2818_PIN_PE5, GPIO_OUT) //I2C0_SCL
-#define CLK_SET() gpio_set_value(RK2818_PIN_PE5, GPIO_HIGH)
-#define CLK_CLR() gpio_set_value(RK2818_PIN_PE5, GPIO_LOW)
-#define TXD_OUT() gpio_direction_output(RK2818_PIN_PE4, GPIO_OUT) //I2C0_SDA
-#define TXD_SET() gpio_set_value(RK2818_PIN_PE4, GPIO_HIGH)
-#define TXD_CLR() gpio_set_value(RK2818_PIN_PE4, GPIO_LOW)
-
#define DRVDelayUs(i) udelay(i*2)
u32 i;
DRVDelayUs(2);
CS_CLR();
-#if 0
- TXD_CLR(); //write
-
- // \u6a21\u62dfCLK
- CLK_CLR();
- DRVDelayUs(2);
- CLK_SET();
- DRVDelayUs(2);
-
- TXD_SET(); //highz
-
- // \u6a21\u62dfCLK
- CLK_CLR();
- DRVDelayUs(2);
- CLK_SET();
- DRVDelayUs(2);
-#endif
-
control_bit = 0x72<<8;
Data = (control_bit | Data);
//printk("data is 0x%x \n", Data);
CLK_CLR();
TXD_CLR();
DRVDelayUs(2);
-
}
+void set_lcd_info(struct rk28fb_screen *screen)
+{
+ //printk("lcd_hx8357 set_lcd_info \n");
+ /* screen type & face */
+ screen->type = OUT_TYPE;
+ screen->face = OUT_FACE;
+
+ /* Screen size */
+ screen->x_res = H_VD;
+ screen->y_res = V_VD;
+
+ /* Timing */
+ screen->pixclock = OUT_CLK;
+ screen->left_margin = H_BP; /*>2*/
+ screen->right_margin = H_FP; /*>2*/
+ screen->hsync_len = H_PW; /*>2*/ //***all > 326, 4<PW+BP<15,
+ screen->upper_margin = V_BP; /*>2*/
+ screen->lower_margin = V_FP; /*>2*/
+ screen->vsync_len = V_PW; /*>6*/
+
+ /* Pin polarity */
+ screen->pin_hsync = 0;
+ screen->pin_vsync = 0;
+ screen->pin_den = 0;
+ screen->pin_dclk = DCLK_POL;
+ /* Swap rule */
+ screen->swap_rb = SWAP_RB;
+ screen->swap_rg = 0;
+ screen->swap_gb = 0;
+ screen->swap_delta = 0;
+ screen->swap_dumy = 0;
+
+ /* Operation function*/
+ screen->init = init;
+ screen->standby = standby;
+}
int init(void)
{
- printk("lcd_hx8357 init \n");
- screen_set_iomux(1);
+ //printk("lcd_hx8357 init \n");
+ lcd_td043mgea1.screen_set_iomux(1);
#if 0 //***Õâ¾ä´úÂëÊDz»ÊÇд´íÁË
spi_screenreg_set(0x02, 0x07);
spi_screenreg_set(0x2d, 0x1f);
spi_screenreg_set(0xe8, 0x90);
#endif
- screen_set_iomux(0);
+ lcd_td043mgea1.screen_set_iomux(0);
return 0;
}
int standby(u8 enable) //***enable =1 means suspend, 0 means resume
{
- screen_set_iomux(1);
+ lcd_td043mgea1.screen_set_iomux(1);
if(enable) {
- printk("---------screen suspend--------------\n");
+ //printk("---------screen suspend--------------\n");
#if 0
spi_screenreg_set(0x03, 0xde);
#else
spi_screenreg_set(0x19, 0x00);
#endif
} else {
- printk("---------screen resume--------------\n ");
+ //printk("---------screen resume--------------\n ");
#if 0
spi_screenreg_set(0x03, 0x5f);
#else
#endif
}
- screen_set_iomux(0);
+ lcd_td043mgea1.screen_set_iomux(0);
return 0;
}
#include <mach/gpio.h>
#include <mach/iomux.h>
#include "screen.h"
+#include <mach/board.h>
+
+extern struct lcd_td043mgea1_data lcd_td043mgea1;
/* Base */
#define OUT_TYPE SCREEN_RGB
#define DCLK_POL 0
#define SWAP_RB 0
-
-#if defined (CONFIG_MACH_RK2818PHONE)
-
-#define TXD_PORT RK2818_PIN_PE6
-#define CLK_PORT RK2818_PIN_PE7
-#define CS_PORT RK2818_PIN_PA4
-
-#define CS_OUT() gpio_direction_output(CS_PORT, 0)
-#define CS_SET() gpio_set_value(CS_PORT, GPIO_HIGH)
-#define CS_CLR() gpio_set_value(CS_PORT, GPIO_LOW)
-#define CLK_OUT() gpio_direction_output(CLK_PORT, 0) //I2C1_SCL
-#define CLK_SET() gpio_set_value(CLK_PORT, GPIO_HIGH)
-#define CLK_CLR() gpio_set_value(CLK_PORT, GPIO_LOW)
-#define TXD_OUT() gpio_direction_output(TXD_PORT, 0) //I2C1_SDA
-#define TXD_SET() gpio_set_value(TXD_PORT, GPIO_HIGH)
-#define TXD_CLR() gpio_set_value(TXD_PORT, GPIO_LOW)
-
-#elif defined(CONFIG_MACH_RAHO)
-
-#define TXD_PORT RK2818_PIN_PE4
-#define CLK_PORT RK2818_PIN_PE5
-#define CS_PORT RK2818_PIN_PH6
+#define TXD_PORT lcd_td043mgea1.pin_txd
+#define CLK_PORT lcd_td043mgea1.pin_clk
+#define CS_PORT lcd_td043mgea1.pin_cs
#define CS_OUT() gpio_direction_output(CS_PORT, 0)
#define CS_SET() gpio_set_value(CS_PORT, GPIO_HIGH)
#define CS_CLR() gpio_set_value(CS_PORT, GPIO_LOW)
-#define CLK_OUT() gpio_direction_output(CLK_PORT, 0) //I2C1_SCL
+#define CLK_OUT() gpio_direction_output(CLK_PORT, 0)
#define CLK_SET() gpio_set_value(CLK_PORT, GPIO_HIGH)
#define CLK_CLR() gpio_set_value(CLK_PORT, GPIO_LOW)
-#define TXD_OUT() gpio_direction_output(TXD_PORT, 0) //I2C1_SDA
+#define TXD_OUT() gpio_direction_output(TXD_PORT, 0)
#define TXD_SET() gpio_set_value(TXD_PORT, GPIO_HIGH)
#define TXD_CLR() gpio_set_value(TXD_PORT, GPIO_LOW)
-#endif
-
int init(void);
int standby(u8 enable);
-void screen_set_iomux(u8 enable)
-{
- int ret=-1;
-#if defined (CONFIG_MACH_RK2818PHONE)
- if(enable)
- {
- rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 0);
- ret = gpio_request(RK2818_PIN_PA4, NULL);
- if(0)//(ret != 0)
- {
- gpio_free(RK2818_PIN_PA4);
- printk(">>>>>> lcd cs gpio_request err \n ");
- goto pin_err;
- }
-
- rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 0);
-
- ret = gpio_request(TXD_PORT, NULL);
- if(0)//(ret != 0)
- {
- gpio_free(RK2818_PIN_PE7);
- printk(">>>>>> lcd clk gpio_request err \n ");
- goto pin_err;
- }
-
- ret = gpio_request(RK2818_PIN_PE6, NULL);
- if(0)//(ret != 0)
- {
- gpio_free(RK2818_PIN_PE6);
- printk(">>>>>> lcd txd gpio_request err \n ");
- goto pin_err;
- }
- }
- else
- {
- gpio_free(RK2818_PIN_PA4);
- rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
-
- gpio_free(RK2818_PIN_PE7);
- gpio_free(RK2818_PIN_PE6);
- rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, 2);
- }
-#elif defined(CONFIG_MACH_RAHO)
- if(enable)
- {
- rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 0);
- ret = gpio_request(CS_PORT, NULL);
- if(ret != 0)
- {
- gpio_free(CS_PORT);
- printk(">>>>>> lcd cs gpio_request err \n ");
- goto pin_err;
- }
-
- rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 1);
-
- ret = gpio_request(TXD_PORT, NULL);
- if(ret != 0)
- {
- gpio_free(TXD_PORT);
- printk(">>>>>> lcd clk gpio_request err \n ");
- goto pin_err;
- }
-
- ret = gpio_request(CLK_PORT, NULL);
- if(ret != 0)
- {
- gpio_free(CLK_PORT);
- printk(">>>>>> lcd txd gpio_request err \n ");
- goto pin_err;
- }
- }
- else
- {
- gpio_free(CS_PORT);
- rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 1);
-
- gpio_free(TXD_PORT);
- gpio_free(CLK_PORT);
- rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 0);
- }
-#endif
- return ;
-pin_err:
- return ;
-
-}
-
void set_lcd_info(struct rk28fb_screen *screen)
{
/* screen type & face */
int init(void)
{
- screen_set_iomux(1);
+ lcd_td043mgea1.screen_set_iomux(1);
spi_screenreg_set(0x02, 0x07);
spi_screenreg_set(0x03, 0x5f);
spi_screenreg_set(0x21, 0xF0);
spi_screenreg_set(0x22, 0x09);
- screen_set_iomux(0);
+ lcd_td043mgea1.screen_set_iomux(0);
return 0;
}
int standby(u8 enable)
{
- screen_set_iomux(1);
+ lcd_td043mgea1.screen_set_iomux(1);
if(enable) {
spi_screenreg_set(0x03, 0xde);
} else {
spi_screenreg_set(0x03, 0x5f);
}
- screen_set_iomux(0);
+ lcd_td043mgea1.screen_set_iomux(0);
return 0;
}