2 * Copyright (C) 2012 Spreadtrum Communications Inc.
\r
4 * This software is licensed under the terms of the GNU General Public
\r
5 * License version 2, as published by the Free Software Foundation, and
\r
6 * may be copied, distributed, and modified under those terms.
\r
8 * This program is distributed in the hope that it will be useful,
\r
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
11 * GNU General Public License for more details.
\r
14 #include <asm/arch/sci_types.h>
\r
15 #include <asm/arch/tiger_lcd.h>
\r
16 #include <asm/arch/sc8825_spi.h>
\r
21 SPI_INIT_PARM spi_int_parm[] =
\r
32 0xF0, //clk_div:(n+1)*2
\r
33 0x0, //data_width.0-32bits per word; n-nbits per word
\r
35 SPI_TX_FIFO_DEPTH - 1,
\r
37 SPI_RX_FIFO_DEPTH - 1
\r
38 }, //for spi_lcm test
\r
39 //{TX_POS_EDGE,RX_NEG_EDGE,TX_RX_LSB,RX_TX_MODE,NO_SWITCH,SLAVE_MODE,0x0,0x0,0xF0,0x0,0x0,SPI_TX_FIFO_DEPTH - 1,0x0,SPI_RX_FIFO_DEPTH - 1},
\r
43 /**---------------------------------------------------------------------------*
\r
44 ** SPI Interface for LCM test case depend on spi_drv.c *
\r
45 **---------------------------------------------------------------------------*/
\r
47 // --------------------------------------------------------------------------- //
\r
48 // Description: configure the start byte
\r
49 // Global resource dependence:
\r
51 // Note : LCM test code
\r
52 // --------------------------------------------------------------------------- //
\r
54 static void DISPC_SpiWriteCmd(uint32_t cmd)
\r
56 SPI_SetDatawidth(8);
\r
57 SPI_SetCsLow(0, FALSE);
\r
60 for(i=0; i<1000; i++);
\r
63 SPI_SetCsLow(0, TRUE);
\r
66 // Write a data identical with buswidth
\r
67 SPI_WriteData( cmd, 1, 0);
\r
71 static void DISPC_SpiWriteData(uint32_t data)
\r
73 SPI_SetDatawidth(8);
\r
77 // Write a data identical with buswidth
\r
78 SPI_WriteData( data, 1, 0);
\r
82 static void SPI_Read( uint32_t* data)
\r
86 SPI_SetDatawidth(8);
\r
89 lcm_id = SPI_ReadData(1, 0); //unit of buswidth
\r
92 for(i=0; i<1000; i++);
\r
94 SPI_SetCsLow(0, FALSE);
\r
99 void SPI_PinCfg( void )
\r
101 /*enable access the spi reg*/
\r
102 *((volatile uint32 *)(0x4b000008)) |= BIT_1;
\r
103 *((volatile uint32 *)(0x4b0000c0)) |= BIT_0;
\r
106 CHIP_REG_SET (PIN_LCD_D6_REG, (PIN_FPD_EN | PIN_FUNC_1 | PIN_O_EN)); //SPI0_2_CD
\r
107 CHIP_REG_SET (PIN_LCD_RDN_REG, (PIN_FPD_EN | PIN_FUNC_1 | PIN_I_EN)); //SPI0_2_DI
\r
108 CHIP_REG_SET (PIN_LCD_WRN_REG, (PIN_FPD_EN | PIN_FUNC_1 | PIN_O_EN)); //SPI0_2_DO
\r
109 CHIP_REG_SET (PIN_LCD_CD_REG, (PIN_FPD_EN | PIN_FUNC_1 | PIN_O_EN)); //SPI0_2_CLK
\r
110 CHIP_REG_SET (PIN_LCD_CSN0_REG, (PIN_FPD_EN | PIN_FUNC_1 | PIN_O_EN)); //SPI0_2_CS0
\r
113 TB_REG_OR(GEN0, (1 << 13));
\r
116 TB_REG_SET (PIN_LCD_D0_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_DI
\r
117 TB_REG_SET (PIN_LCD_D1_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_DO
\r
118 TB_REG_SET (PIN_LCD_D2_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_CLK
\r
119 TB_REG_SET (PIN_LCD_D3_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_CS0
\r
120 TB_REG_SET (PIN_LCD_D4_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_CS1
\r
121 TB_REG_SET (PIN_LCD_D5_REG, (PIN_DS_2 | PIN_FUNC_1 )); //SPI0_1_CD
\r
124 TB_REG_AND(PIN_CTL_REG, ~(BIT_29|BIT_30));
\r
125 TB_REG_OR(PIN_CTL_REG, (1<<29));
\r
129 BOOLEAN sprdfb_spi_init(struct sprdfb_device *dev)
\r
131 SPI_Enable(SPI_USED_ID, TRUE);
\r
132 SPI_Init( spi_int_parm);
\r
134 SPI_ClkSetting( SPI_USED_ID, SPICLK_SEL_192M, 0);
\r
135 SPI_SetDatawidth(8);
\r
139 BOOLEAN sprdfb_spi_uninit(struct sprdfb_device *dev)
\r
144 struct ops_spi sprdfb_spi_ops = {
\r
145 .spi_send_cmd = DISPC_SpiWriteCmd,
\r
146 .spi_send_data = DISPC_SpiWriteData,
\r
147 .spi_read = SPI_Read,
\r