change source file mode to 0644 instead of 0755
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / cpu / armv7 / sc8810 / vibrator.c
1 #include <config.h>
2 #include <asm/io.h>
3 #include <asm/arch/chip_drv_config_extern.h>
4 #include <asm/arch/bits.h>
5 #include <linux/types.h>
6 #include <asm/arch/regs_adi.h>
7 #include <asm/arch/adi_hal_internal.h>
8 #define VIBRATOR_REG_UNLOCK (0xA1B2)
9 #define VIBRATOR_REG_LOCK   (~VIBRATOR_REG_UNLOCK)
10 #define VIBRATOR_STABLE_LEVEL   (4)
11 #define VIBRATOR_INIT_LEVEL (11)    //init level must larger than stable level
12 #define VIBRATOR_INIT_STATE_CNT (2)
13 #define mdelay(_ms) udelay(_ms*1000)
14 void set_vibrator(int on)
15 {
16         int i = 0;
17         ANA_REG_SET(ANA_VIBR_WR_PROT, VIBRATOR_REG_UNLOCK); //unlock vibrator registor
18 #if defined(CONFIG_SC7710G2)
19         if(on == 0){
20                 ANA_REG_AND(ANA_VIBRATOR_CTL0, ~(VIBR_PD_SET));
21         }else{
22                 ANA_REG_OR(ANA_VIBRATOR_CTL0, VIBR_PD_SET);
23         }
24 #else
25         if(on == 0){
26                 ANA_REG_AND(ANA_VIBRATOR_CTL0, ~(VIBR_PD_SET | VIBR_PD_RST));
27                 ANA_REG_OR(ANA_VIBRATOR_CTL0, VIBR_PD_SET);
28         }else{
29                 ANA_REG_AND(ANA_VIBRATOR_CTL0, ~(VIBR_PD_SET | VIBR_PD_RST));
30                 ANA_REG_OR(ANA_VIBRATOR_CTL0, VIBR_PD_SET);
31         }
32 #endif  
33         ANA_REG_SET(ANA_VIBR_WR_PROT, VIBRATOR_REG_LOCK);   //lock vibrator registor
34 }
35 void vibrator_hw_init(void)
36 {
37         ANA_REG_SET(ANA_VIBR_WR_PROT, VIBRATOR_REG_UNLOCK); //unlock vibrator registor
38
39         ANA_REG_OR(ANA_VIBRATOR_CTL0, VIBR_RTC_EN);
40         ANA_REG_AND(ANA_VIBRATOR_CTL0, ~VIBR_BP_EN);   //enable new version,so VIBR_V_BP is disable.
41
42         ANA_REG_MSK_OR(ANA_VIBRATOR_CTL0, (VIBRATOR_INIT_LEVEL << VIBR_INIT_V_SHIFT), VIBR_INIT_V_MSK); //set init current level
43         ANA_REG_MSK_OR(ANA_VIBRATOR_CTL0, (VIBRATOR_STABLE_LEVEL << VIBR_STABLE_V_SHIFT), VIBR_STABLE_V_MSK); //set stable current level
44         ANA_REG_SET(ANA_VIBRATOR_CTL1, VIBRATOR_INIT_STATE_CNT);   //set convert count
45
46         ANA_REG_SET(ANA_VIBR_WR_PROT, VIBRATOR_REG_LOCK);   //lock vibrator registor
47 }
48
49