diff options
| author | Micky Ching <micky_ching@realsil.com.cn> | 2015-02-25 00:50:12 -0500 |
|---|---|---|
| committer | Lee Jones <lee.jones@linaro.org> | 2015-03-03 11:41:19 -0500 |
| commit | b038538104d5b033d3beaffba6d6efe01246930b (patch) | |
| tree | e51dc6db8a785a16bfb91316543baa5fb4eccc4c | |
| parent | e89f231826a773ea37dfa99ab619f3ee34c06522 (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.c | 29 | ||||
| -rw-r--r-- | include/linux/mfd/rtsx_pci.h | 109 |
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 | ||
| 188 | static int rts5249_turn_on_led(struct rtsx_pcr *pcr) | 193 | static 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 | ||
| 733 | struct rtsx_pcr; | 734 | struct rtsx_pcr; |
