i2s: add support samplerate up to 192K and support S32_LE
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / lvds / rk_lvds.c
1 #include <linux/kernel.h>
2 #include <linux/string.h>
3 #include <asm/io.h>
4 #include <mach/io.h>
5 #include <linux/rk_screen.h>
6 #include "rk_lvds.h"
7
8 static void rk_output_lvds(rk_screen *screen)
9 {
10         LVDSWrReg(m_PDN_CBG(1)|m_PD_PLL(0)|m_PDN(1)|m_OEN(0)    \
11                                         |m_DS(DS_10PF)|m_MSBSEL(DATA_D0_MSB)    \
12                                         |m_OUT_FORMAT(screen->hw_format)                \
13                                         |m_LCDC_SEL(screen->lcdc_id));
14
15        printk("%s>>connect to lcdc output interface%d\n",__func__,screen->lcdc_id);
16 }
17
18 static void rk_output_lvttl(rk_screen *screen)
19 {
20         LVDSWrReg(m_PDN_CBG(0)|m_PD_PLL(1)|m_PDN(0)|m_OEN(1)    \
21                                         |m_DS(DS_10PF)|m_MSBSEL(DATA_D0_MSB)    \
22                                         |m_OUT_FORMAT(screen->hw_format)                \
23                                         |m_LCDC_SEL(screen->lcdc_id));
24         printk("%s>>connect to lcdc output interface%d\n",__func__,screen->lcdc_id);
25 }
26
27 static void rk_output_disable(void)
28 {
29         LVDSWrReg(m_PDN_CBG(0)|m_PD_PLL(1)|m_PDN(0)|m_OEN(0));
30         printk("%s: reg = 0x%x\n",  __func__, LVDSRdReg());
31 }
32
33 static int rk_lvds_set_param(rk_screen *screen,bool enable )
34 {
35         if(OUT_ENABLE == enable){
36                 switch(screen->type){
37                         case SCREEN_LVDS:
38                                         rk_output_lvds(screen);
39                                         
40                                         break;
41                         case SCREEN_RGB:
42                                         rk_output_lvttl(screen);
43                                         break;
44                         default:
45                                 printk("%s>>>>LVDS not support this screen type %d,power down LVDS\n",__func__,screen->type);
46                                         rk_output_disable();
47                                         break;
48                 }
49         }else{
50                 rk_output_disable();
51         }
52         return 0;
53 }
54
55 int rk_lvds_register(rk_screen *screen)
56 {
57         if(screen->sscreen_set == NULL)
58                 screen->sscreen_set = rk_lvds_set_param;
59
60         rk_lvds_set_param(screen , OUT_ENABLE);
61
62         return 0;
63 }