diff options
author | Kevin | 2014-11-15 11:48:36 +0800 |
---|---|---|
committer | Kevin | 2014-11-15 11:48:36 +0800 |
commit | d04075478d378d9e15f3e1abfd14b0bd124077d4 (patch) | |
tree | 733dd964582f388b9e3e367c249946cd32a2851f /board/wmt/vt1603 | |
download | FOSSEE-netbook-uboot-source-d04075478d378d9e15f3e1abfd14b0bd124077d4.tar.gz FOSSEE-netbook-uboot-source-d04075478d378d9e15f3e1abfd14b0bd124077d4.tar.bz2 FOSSEE-netbook-uboot-source-d04075478d378d9e15f3e1abfd14b0bd124077d4.zip |
init commit via android 4.4 uboot
Diffstat (limited to 'board/wmt/vt1603')
-rwxr-xr-x | board/wmt/vt1603/snd-vt1603.c | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/board/wmt/vt1603/snd-vt1603.c b/board/wmt/vt1603/snd-vt1603.c new file mode 100755 index 0000000..db40142 --- /dev/null +++ b/board/wmt/vt1603/snd-vt1603.c @@ -0,0 +1,262 @@ +#include <common.h> +#include <command.h> +#include <linux/ctype.h> +#include <asm/arch/common_def.h> +#include <asm/errno.h> + +#include "../include/wmt_pmc.h" +#include "../include/wmt_spi.h" +#include "../include/wmt_clk.h" +#include "../include/wmt_gpio.h" + +#define BIT0 0x00000001 +#define BIT1 0x00000002 +#define BIT2 0x00000004 +#define BIT3 0x00000008 +#define BIT4 0x00000010 +#define BIT5 0x00000020 +#define BIT6 0x00000040 +#define BIT7 0x00000080 +#define BIT8 0x00000100 + +#define VT1603_R00 0x00 +#define VT1603_R01 0x01 +#define VT1603_R02 0x02 +#define VT1603_R03 0x03 +#define VT1603_R04 0x04 +#define VT1603_R05 0x05 +#define VT1603_R06 0x06 +#define VT1603_R07 0x07 +#define VT1603_R08 0x08 +#define VT1603_R09 0x09 +#define VT1603_R0a 0x0a +#define VT1603_R0b 0x0b +#define VT1603_R0c 0x0c +#define VT1603_R0d 0x0d +#define VT1603_R0e 0x0e +#define VT1603_R0f 0x0f +#define VT1603_R10 0x10 +#define VT1603_R11 0x11 +#define VT1603_R12 0x12 +#define VT1603_R13 0x13 +#define VT1603_R15 0x15 +#define VT1603_R19 0x19 +#define VT1603_R1b 0x1b +#define VT1603_R1c 0x1c +#define VT1603_R1d 0x1d +#define VT1603_R20 0x20 +#define VT1603_R21 0x21 +#define VT1603_R23 0x23 +#define VT1603_R24 0x24 +#define VT1603_R25 0x25 +#define VT1603_R28 0x28 +#define VT1603_R29 0x29 +#define VT1603_R2a 0x2a +#define VT1603_R2b 0x2b +#define VT1603_R2c 0x2c +#define VT1603_R2d 0x2d +#define VT1603_R40 0x40 +#define VT1603_R41 0x41 +#define VT1603_R42 0x42 +#define VT1603_R47 0x47 +#define VT1603_R51 0x51 +#define VT1603_R52 0x52 +#define VT1603_R53 0x53 +#define VT1603_R5f 0x5f +#define VT1603_R60 0x60 +#define VT1603_R61 0x61 +#define VT1603_R62 0x62 +#define VT1603_R63 0x63 +#define VT1603_R64 0x64 +#define VT1603_R65 0x65 +#define VT1603_R66 0x66 +#define VT1603_R67 0x67 +#define VT1603_R68 0x68 +#define VT1603_R69 0x69 +#define VT1603_R6a 0x6a +#define VT1603_R6b 0x6b +#define VT1603_R6d 0x6d +#define VT1603_R6e 0x6e +#define VT1603_R70 0x70 +#define VT1603_R71 0x71 +#define VT1603_R72 0x72 +#define VT1603_R73 0x73 +#define VT1603_R77 0x77 +#define VT1603_R79 0x79 +#define VT1603_R7a 0x7a +#define VT1603_R7b 0x7b +#define VT1603_R7c 0x7c +#define VT1603_R82 0x82 +#define VT1603_R87 0x87 +#define VT1603_R88 0x88 +#define VT1603_R8a 0x8a +#define VT1603_R8e 0x8e +#define VT1603_R90 0x90 +#define VT1603_R91 0x91 +#define VT1603_R92 0x92 +#define VT1603_R93 0x93 +#define VT1603_R95 0x95 +#define VT1603_R96 0x96 +#define VT1603_R97 0x97 + +extern int wmt_getsyspara(char *varname,char *varval, int *varlen); + +static int vt1603_spi_write(u8 addr, const u8 data) +{ + u8 wbuf[3], rbuf[3]; + + wbuf[0] = ((addr & 0xFF) | BIT7); + wbuf[1] = ((addr & 0xFF) >> 7); + wbuf[2] = data; + + spi_write_then_read_data(wbuf, rbuf, sizeof(wbuf), + SPI_MODE_3, 0); + + udelay(10); + return 0; +} + +static int vt1603_spi_read(u8 addr, u8 *data) +{ + u8 wbuf[5] = {0}; + u8 rbuf[5] = {0}; + + memset(wbuf,0,sizeof(wbuf)); + memset(rbuf,0,sizeof(rbuf)); + + wbuf[0] = ((addr & 0xFF) & (~BIT7)); + wbuf[1] = ((addr & 0xFF) >> 7); + + spi_write_then_read_data(wbuf, rbuf, sizeof(wbuf), + SPI_MODE_3, 0); + + if (0) { + int i; + for (i = 0; i < sizeof(rbuf); i++) + printf("0x%02x ", rbuf[i]); + printf("\n"); + } + data[0] = rbuf[4]; + return 0; +} + +static inline void i2s_pin_config(void) +{ + /* disable GPIO and Pull Down mode */ + GPIO_CTRL_GP10_I2S_BYTE_VAL &= ~0xFF; + GPIO_CTRL_GP11_I2S_BYTE_VAL &= ~(BIT0 | BIT1 | BIT2); + + PULL_EN_GP10_I2S_BYTE_VAL &= ~0xFF; + PULL_EN_GP11_I2S_BYTE_VAL &= ~(BIT0 | BIT1 | BIT2); + + /* set to 2ch input, 2ch output */ + PIN_SHARING_SEL_4BYTE_VAL &= ~(BIT13 | BIT14 | BIT15 | BIT17 | BIT19 | BIT20 | BIT22); + PIN_SHARING_SEL_4BYTE_VAL |= (BIT1 | BIT16 | BIT18 | BIT21); +} + +static inline void i2s_clk_config(void) +{ + /* set to 11.288MHz */ + auto_pll_divisor(DEV_I2S, CLK_ENABLE , 0, 0); + auto_pll_divisor(DEV_I2S, SET_PLLDIV, 1, 11288); + + /* Enable BIT4:ARFP clock, BIT3:ARF clock */ + PMCEU_VAL |= (BIT4 | BIT3); + + /* Enable BIT2:AUD clock */ + PMCE3_VAL |= BIT2; +} + +void vt1603_snd_init(void) +{ + u8 data = 0; + int ret = 0; + char buf[512] = {0}; + int buflen = 512; + unsigned long val = 0; + int need_on = 0; + printf("vt1603_snd_init need on!!\n"); + if(wmt_getsyspara("wmt.vt1603.out_on", buf, &buflen) == 0) { + val = simple_strtoul(buf, NULL, 10); + + need_on = (int)val; + + } + else + need_on = 0; + if (!need_on) + return; + + i2s_pin_config(); + i2s_clk_config(); + + printf("vt1603_snd_init need on!!\n"); +#if 0 + u8 tmp = 0; + vt1603_spi_read(VT1603_R68, &data); + vt1603_spi_read(VT1603_R68, &tmp); + + int i = 0; + for (i=0; i<12; i++) + { + vt1603_spi_write(VT1603_R68, i); + vt1603_spi_read(VT1603_R68, &tmp); + + printf("write %d, read back %d\n", i, tmp); + } +#endif + //hp on + ret = vt1603_spi_read(VT1603_R68, &data); + data &= ~(1<<4); + vt1603_spi_write(VT1603_R68, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R68, &data); + printf("read back %d\n", data); + + ret = vt1603_spi_read(VT1603_R69, &data); + data |= 1<<2; + vt1603_spi_write(VT1603_R69, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R69, &data); + printf("read back %d\n", data); + + ret = vt1603_spi_read(VT1603_R69, &data); + data |= 1<<5; + vt1603_spi_write(VT1603_R69, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R69, &data); + printf("read back %d\n", data); + + //spk on + ret = vt1603_spi_read(VT1603_R25, &data); + data |= 1<<1; + vt1603_spi_write(VT1603_R25, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R25, &data); + printf("read back %d\n", data); + + ret = vt1603_spi_read(VT1603_R90, &data); + data |= 1<<5; + vt1603_spi_write(VT1603_R90, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R90, &data); + printf("read back %d\n", data); + + ret = vt1603_spi_read(VT1603_R90, &data); + data |= 1<<3; + vt1603_spi_write(VT1603_R90, data); + + printf("<<<<%s write %d,",__func__,data); + ret = vt1603_spi_read(VT1603_R90, &data); + printf("read back %d\n", data); + + + + +} + |