aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMicky Ching <micky_ching@realsil.com.cn>2015-02-25 00:50:12 -0500
committerLee Jones <lee.jones@linaro.org>2015-03-03 11:41:19 -0500
commitb038538104d5b033d3beaffba6d6efe01246930b (patch)
treee51dc6db8a785a16bfb91316543baa5fb4eccc4c
parente89f231826a773ea37dfa99ab619f3ee34c06522 (diff)
mfd: rtsx: Update phy register
Update some phy register name and value for rts5249, the updated value makes chip more stable on some platform. Signed-off-by: Micky Ching <micky_ching@realsil.com.cn> Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r--drivers/mfd/rts5249.c29
-rw-r--r--include/linux/mfd/rtsx_pci.h109
2 files changed, 72 insertions, 66 deletions
diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c
index 2fe2854fb450..8de822048ff2 100644
--- a/drivers/mfd/rts5249.c
+++ b/drivers/mfd/rts5249.c
@@ -132,11 +132,12 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr)
132 if (err < 0) 132 if (err < 0)
133 return err; 133 return err;
134 134
135 err = rtsx_pci_write_phy_register(pcr, PHY_REG_REV, 135 err = rtsx_pci_write_phy_register(pcr, PHY_REV,
136 PHY_REG_REV_RESV | PHY_REG_REV_RXIDLE_LATCHED | 136 PHY_REV_RESV | PHY_REV_RXIDLE_LATCHED |
137 PHY_REG_REV_P1_EN | PHY_REG_REV_RXIDLE_EN | 137 PHY_REV_P1_EN | PHY_REV_RXIDLE_EN |
138 PHY_REG_REV_RX_PWST | PHY_REG_REV_CLKREQ_DLY_TIMER_1_0 | 138 PHY_REV_CLKREQ_TX_EN | PHY_REV_RX_PWST |
139 PHY_REG_REV_STOP_CLKRD | PHY_REG_REV_STOP_CLKWR); 139 PHY_REV_CLKREQ_DT_1_0 | PHY_REV_STOP_CLKRD |
140 PHY_REV_STOP_CLKWR);
140 if (err < 0) 141 if (err < 0)
141 return err; 142 return err;
142 143
@@ -147,19 +148,21 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr)
147 PHY_BPCR_IB_FILTER | PHY_BPCR_CMIRROR_EN); 148 PHY_BPCR_IB_FILTER | PHY_BPCR_CMIRROR_EN);
148 if (err < 0) 149 if (err < 0)
149 return err; 150 return err;
151
150 err = rtsx_pci_write_phy_register(pcr, PHY_PCR, 152 err = rtsx_pci_write_phy_register(pcr, PHY_PCR,
151 PHY_PCR_FORCE_CODE | PHY_PCR_OOBS_CALI_50 | 153 PHY_PCR_FORCE_CODE | PHY_PCR_OOBS_CALI_50 |
152 PHY_PCR_OOBS_VCM_08 | PHY_PCR_OOBS_SEN_90 | 154 PHY_PCR_OOBS_VCM_08 | PHY_PCR_OOBS_SEN_90 |
153 PHY_PCR_RSSI_EN); 155 PHY_PCR_RSSI_EN | PHY_PCR_RX10K);
154 if (err < 0) 156 if (err < 0)
155 return err; 157 return err;
158
156 err = rtsx_pci_write_phy_register(pcr, PHY_RCR2, 159 err = rtsx_pci_write_phy_register(pcr, PHY_RCR2,
157 PHY_RCR2_EMPHASE_EN | PHY_RCR2_NADJR | 160 PHY_RCR2_EMPHASE_EN | PHY_RCR2_NADJR |
158 PHY_RCR2_CDR_CP_10 | PHY_RCR2_CDR_SR_2 | 161 PHY_RCR2_CDR_SR_2 | PHY_RCR2_FREQSEL_12 |
159 PHY_RCR2_FREQSEL_12 | PHY_RCR2_CPADJEN | 162 PHY_RCR2_CDR_SC_12P | PHY_RCR2_CALIB_LATE);
160 PHY_RCR2_CDR_SC_8 | PHY_RCR2_CALIB_LATE);
161 if (err < 0) 163 if (err < 0)
162 return err; 164 return err;
165
163 err = rtsx_pci_write_phy_register(pcr, PHY_FLD4, 166 err = rtsx_pci_write_phy_register(pcr, PHY_FLD4,
164 PHY_FLD4_FLDEN_SEL | PHY_FLD4_REQ_REF | 167 PHY_FLD4_FLDEN_SEL | PHY_FLD4_REQ_REF |
165 PHY_FLD4_RXAMP_OFF | PHY_FLD4_REQ_ADDA | 168 PHY_FLD4_RXAMP_OFF | PHY_FLD4_REQ_ADDA |
@@ -167,11 +170,12 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr)
167 PHY_FLD4_BER_CHK_EN); 170 PHY_FLD4_BER_CHK_EN);
168 if (err < 0) 171 if (err < 0)
169 return err; 172 return err;
170 err = rtsx_pci_write_phy_register(pcr, PHY_RDR, PHY_RDR_RXDSEL_1_9); 173 err = rtsx_pci_write_phy_register(pcr, PHY_RDR,
174 PHY_RDR_RXDSEL_1_9 | PHY_SSC_AUTO_PWD);
171 if (err < 0) 175 if (err < 0)
172 return err; 176 return err;
173 err = rtsx_pci_write_phy_register(pcr, PHY_RCR1, 177 err = rtsx_pci_write_phy_register(pcr, PHY_RCR1,
174 PHY_RCR1_ADP_TIME | PHY_RCR1_VCO_COARSE); 178 PHY_RCR1_ADP_TIME_4 | PHY_RCR1_VCO_COARSE);
175 if (err < 0) 179 if (err < 0)
176 return err; 180 return err;
177 err = rtsx_pci_write_phy_register(pcr, PHY_FLD3, 181 err = rtsx_pci_write_phy_register(pcr, PHY_FLD3,
@@ -179,10 +183,11 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr)
179 PHY_FLD3_RXDELINK); 183 PHY_FLD3_RXDELINK);
180 if (err < 0) 184 if (err < 0)
181 return err; 185 return err;
186
182 return rtsx_pci_write_phy_register(pcr, PHY_TUNE, 187 return rtsx_pci_write_phy_register(pcr, PHY_TUNE,
183 PHY_TUNE_TUNEREF_1_0 | PHY_TUNE_VBGSEL_1252 | 188 PHY_TUNE_TUNEREF_1_0 | PHY_TUNE_VBGSEL_1252 |
184 PHY_TUNE_SDBUS_33 | PHY_TUNE_TUNED18 | 189 PHY_TUNE_SDBUS_33 | PHY_TUNE_TUNED18 |
185 PHY_TUNE_TUNED12); 190 PHY_TUNE_TUNED12 | PHY_TUNE_TUNEA12);
186} 191}
187 192
188static int rts5249_turn_on_led(struct rtsx_pcr *pcr) 193static int rts5249_turn_on_led(struct rtsx_pcr *pcr)
diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h
index 87cff60953f6..0103210ec3e1 100644
--- a/include/linux/mfd/rtsx_pci.h
+++ b/include/linux/mfd/rtsx_pci.h
@@ -630,16 +630,47 @@
630 630
631/* Phy register */ 631/* Phy register */
632#define PHY_PCR 0x00 632#define PHY_PCR 0x00
633#define PHY_PCR_FORCE_CODE 0xB000
634#define PHY_PCR_OOBS_CALI_50 0x0800
635#define PHY_PCR_OOBS_VCM_08 0x0200
636#define PHY_PCR_OOBS_SEN_90 0x0040
637#define PHY_PCR_RSSI_EN 0x0002
638#define PHY_PCR_RX10K 0x0001
639
633#define PHY_RCR0 0x01 640#define PHY_RCR0 0x01
634#define PHY_RCR1 0x02 641#define PHY_RCR1 0x02
642#define PHY_RCR1_ADP_TIME_4 0x0400
643#define PHY_RCR1_VCO_COARSE 0x001F
644
635#define PHY_RCR2 0x03 645#define PHY_RCR2 0x03
646#define PHY_RCR2_EMPHASE_EN 0x8000
647#define PHY_RCR2_NADJR 0x4000
648#define PHY_RCR2_CDR_SR_2 0x0100
649#define PHY_RCR2_FREQSEL_12 0x0040
650#define PHY_RCR2_CDR_SC_12P 0x0010
651#define PHY_RCR2_CALIB_LATE 0x0002
652
636#define PHY_RTCR 0x04 653#define PHY_RTCR 0x04
637#define PHY_RDR 0x05 654#define PHY_RDR 0x05
655#define PHY_RDR_RXDSEL_1_9 0x4000
656#define PHY_SSC_AUTO_PWD 0x0600
638#define PHY_TCR0 0x06 657#define PHY_TCR0 0x06
639#define PHY_TCR1 0x07 658#define PHY_TCR1 0x07
640#define PHY_TUNE 0x08 659#define PHY_TUNE 0x08
660#define PHY_TUNE_TUNEREF_1_0 0x4000
661#define PHY_TUNE_VBGSEL_1252 0x0C00
662#define PHY_TUNE_SDBUS_33 0x0200
663#define PHY_TUNE_TUNED18 0x01C0
664#define PHY_TUNE_TUNED12 0X0020
665#define PHY_TUNE_TUNEA12 0x0004
666
641#define PHY_IMR 0x09 667#define PHY_IMR 0x09
642#define PHY_BPCR 0x0A 668#define PHY_BPCR 0x0A
669#define PHY_BPCR_IBRXSEL 0x0400
670#define PHY_BPCR_IBTXSEL 0x0100
671#define PHY_BPCR_IB_FILTER 0x0080
672#define PHY_BPCR_CMIRROR_EN 0x0040
673
643#define PHY_BIST 0x0B 674#define PHY_BIST 0x0B
644#define PHY_RAW_L 0x0C 675#define PHY_RAW_L 0x0C
645#define PHY_RAW_H 0x0D 676#define PHY_RAW_H 0x0D
@@ -654,12 +685,35 @@
654#define PHY_BPNR 0x16 685#define PHY_BPNR 0x16
655#define PHY_BRNR2 0x17 686#define PHY_BRNR2 0x17
656#define PHY_BENR 0x18 687#define PHY_BENR 0x18
657#define PHY_REG_REV 0x19 688#define PHY_REV 0x19
689#define PHY_REV_RESV 0xE000
690#define PHY_REV_RXIDLE_LATCHED 0x1000
691#define PHY_REV_P1_EN 0x0800
692#define PHY_REV_RXIDLE_EN 0x0400
693#define PHY_REV_CLKREQ_TX_EN 0x0200
694#define PHY_REV_CLKREQ_RX_EN 0x0100
695#define PHY_REV_CLKREQ_DT_1_0 0x0040
696#define PHY_REV_STOP_CLKRD 0x0020
697#define PHY_REV_RX_PWST 0x0008
698#define PHY_REV_STOP_CLKWR 0x0004
699
658#define PHY_FLD0 0x1A 700#define PHY_FLD0 0x1A
659#define PHY_FLD1 0x1B 701#define PHY_FLD1 0x1B
660#define PHY_FLD2 0x1C 702#define PHY_FLD2 0x1C
661#define PHY_FLD3 0x1D 703#define PHY_FLD3 0x1D
704#define PHY_FLD3_TIMER_4 0x0800
705#define PHY_FLD3_TIMER_6 0x0020
706#define PHY_FLD3_RXDELINK 0x0004
707
662#define PHY_FLD4 0x1E 708#define PHY_FLD4 0x1E
709#define PHY_FLD4_FLDEN_SEL 0x4000
710#define PHY_FLD4_REQ_REF 0x2000
711#define PHY_FLD4_RXAMP_OFF 0x1000
712#define PHY_FLD4_REQ_ADDA 0x0800
713#define PHY_FLD4_BER_COUNT 0x00E0
714#define PHY_FLD4_BER_TIMER 0x000A
715#define PHY_FLD4_BER_CHK_EN 0x0001
716
663#define PHY_DUM_REG 0x1F 717#define PHY_DUM_REG 0x1F
664 718
665#define LCTLR 0x80 719#define LCTLR 0x80
@@ -675,59 +729,6 @@
675#define PCR_SETTING_REG2 0x814 729#define PCR_SETTING_REG2 0x814
676#define PCR_SETTING_REG3 0x747 730#define PCR_SETTING_REG3 0x747
677 731
678/* Phy bits */
679#define PHY_PCR_FORCE_CODE 0xB000
680#define PHY_PCR_OOBS_CALI_50 0x0800
681#define PHY_PCR_OOBS_VCM_08 0x0200
682#define PHY_PCR_OOBS_SEN_90 0x0040
683#define PHY_PCR_RSSI_EN 0x0002
684
685#define PHY_RCR1_ADP_TIME 0x0100
686#define PHY_RCR1_VCO_COARSE 0x001F
687
688#define PHY_RCR2_EMPHASE_EN 0x8000
689#define PHY_RCR2_NADJR 0x4000
690#define PHY_RCR2_CDR_CP_10 0x0400
691#define PHY_RCR2_CDR_SR_2 0x0100
692#define PHY_RCR2_FREQSEL_12 0x0040
693#define PHY_RCR2_CPADJEN 0x0020
694#define PHY_RCR2_CDR_SC_8 0x0008
695#define PHY_RCR2_CALIB_LATE 0x0002
696
697#define PHY_RDR_RXDSEL_1_9 0x4000
698
699#define PHY_TUNE_TUNEREF_1_0 0x4000
700#define PHY_TUNE_VBGSEL_1252 0x0C00
701#define PHY_TUNE_SDBUS_33 0x0200
702#define PHY_TUNE_TUNED18 0x01C0
703#define PHY_TUNE_TUNED12 0X0020
704
705#define PHY_BPCR_IBRXSEL 0x0400
706#define PHY_BPCR_IBTXSEL 0x0100
707#define PHY_BPCR_IB_FILTER 0x0080
708#define PHY_BPCR_CMIRROR_EN 0x0040
709
710#define PHY_REG_REV_RESV 0xE000
711#define PHY_REG_REV_RXIDLE_LATCHED 0x1000
712#define PHY_REG_REV_P1_EN 0x0800
713#define PHY_REG_REV_RXIDLE_EN 0x0400
714#define PHY_REG_REV_CLKREQ_DLY_TIMER_1_0 0x0040
715#define PHY_REG_REV_STOP_CLKRD 0x0020
716#define PHY_REG_REV_RX_PWST 0x0008
717#define PHY_REG_REV_STOP_CLKWR 0x0004
718
719#define PHY_FLD3_TIMER_4 0x7800
720#define PHY_FLD3_TIMER_6 0x00E0
721#define PHY_FLD3_RXDELINK 0x0004
722
723#define PHY_FLD4_FLDEN_SEL 0x4000
724#define PHY_FLD4_REQ_REF 0x2000
725#define PHY_FLD4_RXAMP_OFF 0x1000
726#define PHY_FLD4_REQ_ADDA 0x0800
727#define PHY_FLD4_BER_COUNT 0x00E0
728#define PHY_FLD4_BER_TIMER 0x000A
729#define PHY_FLD4_BER_CHK_EN 0x0001
730
731#define rtsx_pci_init_cmd(pcr) ((pcr)->ci = 0) 732#define rtsx_pci_init_cmd(pcr) ((pcr)->ci = 0)
732 733
733struct rtsx_pcr; 734struct rtsx_pcr;