diff options
| author | Micky Ching <micky_ching@realsil.com.cn> | 2015-02-25 00:50:14 -0500 |
|---|---|---|
| committer | Lee Jones <lee.jones@linaro.org> | 2015-03-03 11:41:20 -0500 |
| commit | 663c425f2c8d87a433629f09c5afd0af7e7e550c (patch) | |
| tree | 37bfe278669642440cb5cf05d605f93b66435ec3 /include/linux | |
| parent | 19f3bd548f2750a8a7e4e6d2f25fdc5f8e2c3ee9 (diff) | |
mfd: rtsx: Add support for rts524A
add support for new chip rts524A.
Signed-off-by: Micky Ching <micky_ching@realsil.com.cn>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mfd/rtsx_pci.h | 132 |
1 files changed, 130 insertions, 2 deletions
diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 33cc63ced99e..754a18d4203a 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h | |||
| @@ -577,8 +577,16 @@ | |||
| 577 | 577 | ||
| 578 | #define CDRESUMECTL 0xFE52 | 578 | #define CDRESUMECTL 0xFE52 |
| 579 | #define WAKE_SEL_CTL 0xFE54 | 579 | #define WAKE_SEL_CTL 0xFE54 |
| 580 | #define PCLK_CTL 0xFE55 | ||
| 581 | #define PCLK_MODE_SEL 0x20 | ||
| 580 | #define PME_FORCE_CTL 0xFE56 | 582 | #define PME_FORCE_CTL 0xFE56 |
| 583 | |||
| 581 | #define ASPM_FORCE_CTL 0xFE57 | 584 | #define ASPM_FORCE_CTL 0xFE57 |
| 585 | #define FORCE_ASPM_CTL0 0x10 | ||
| 586 | #define FORCE_ASPM_VAL_MASK 0x03 | ||
| 587 | #define FORCE_ASPM_L1_EN 0x02 | ||
| 588 | #define FORCE_ASPM_L0_EN 0x01 | ||
| 589 | #define FORCE_ASPM_NO_ASPM 0x00 | ||
| 582 | #define PM_CLK_FORCE_CTL 0xFE58 | 590 | #define PM_CLK_FORCE_CTL 0xFE58 |
| 583 | #define FUNC_FORCE_CTL 0xFE59 | 591 | #define FUNC_FORCE_CTL 0xFE59 |
| 584 | #define PERST_GLITCH_WIDTH 0xFE5C | 592 | #define PERST_GLITCH_WIDTH 0xFE5C |
| @@ -590,7 +598,8 @@ | |||
| 590 | #define HOST_ENTER_S3 2 | 598 | #define HOST_ENTER_S3 2 |
| 591 | 599 | ||
| 592 | #define SDIO_CFG 0xFE70 | 600 | #define SDIO_CFG 0xFE70 |
| 593 | 601 | #define PM_EVENT_DEBUG 0xFE71 | |
| 602 | #define PME_DEBUG_0 0x08 | ||
| 594 | #define NFTS_TX_CTRL 0xFE72 | 603 | #define NFTS_TX_CTRL 0xFE72 |
| 595 | 604 | ||
| 596 | #define PWR_GATE_CTRL 0xFE75 | 605 | #define PWR_GATE_CTRL 0xFE75 |
| @@ -602,12 +611,19 @@ | |||
| 602 | #define PWD_SUSPEND_EN 0xFE76 | 611 | #define PWD_SUSPEND_EN 0xFE76 |
| 603 | #define LDO_PWR_SEL 0xFE78 | 612 | #define LDO_PWR_SEL 0xFE78 |
| 604 | 613 | ||
| 614 | #define L1SUB_CONFIG1 0xFE8D | ||
| 615 | #define L1SUB_CONFIG2 0xFE8E | ||
| 616 | #define L1SUB_AUTO_CFG 0x02 | ||
| 617 | #define L1SUB_CONFIG3 0xFE8F | ||
| 618 | |||
| 605 | #define DUMMY_REG_RESET_0 0xFE90 | 619 | #define DUMMY_REG_RESET_0 0xFE90 |
| 606 | 620 | ||
| 607 | #define AUTOLOAD_CFG_BASE 0xFF00 | 621 | #define AUTOLOAD_CFG_BASE 0xFF00 |
| 608 | #define PETXCFG 0xFF03 | 622 | #define PETXCFG 0xFF03 |
| 609 | 623 | ||
| 610 | #define PM_CTRL1 0xFF44 | 624 | #define PM_CTRL1 0xFF44 |
| 625 | #define CD_RESUME_EN_MASK 0xF0 | ||
| 626 | |||
| 611 | #define PM_CTRL2 0xFF45 | 627 | #define PM_CTRL2 0xFF45 |
| 612 | #define PM_CTRL3 0xFF46 | 628 | #define PM_CTRL3 0xFF46 |
| 613 | #define SDIO_SEND_PME_EN 0x80 | 629 | #define SDIO_SEND_PME_EN 0x80 |
| @@ -628,6 +644,61 @@ | |||
| 628 | #define IMAGE_FLAG_ADDR0 0xCE80 | 644 | #define IMAGE_FLAG_ADDR0 0xCE80 |
| 629 | #define IMAGE_FLAG_ADDR1 0xCE81 | 645 | #define IMAGE_FLAG_ADDR1 0xCE81 |
| 630 | 646 | ||
| 647 | #define RREF_CFG 0xFF6C | ||
| 648 | #define RREF_VBGSEL_MASK 0x38 | ||
| 649 | #define RREF_VBGSEL_1V25 0x28 | ||
| 650 | |||
| 651 | #define OOBS_CONFIG 0xFF6E | ||
| 652 | #define OOBS_AUTOK_DIS 0x80 | ||
| 653 | #define OOBS_VAL_MASK 0x1F | ||
| 654 | |||
| 655 | #define LDO_DV18_CFG 0xFF70 | ||
| 656 | #define LDO_DV18_SR_MASK 0xC0 | ||
| 657 | #define LDO_DV18_SR_DF 0x40 | ||
| 658 | |||
| 659 | #define LDO_CONFIG2 0xFF71 | ||
| 660 | #define LDO_D3318_MASK 0x07 | ||
| 661 | #define LDO_D3318_33V 0x07 | ||
| 662 | #define LDO_D3318_18V 0x02 | ||
| 663 | |||
| 664 | #define LDO_VCC_CFG0 0xFF72 | ||
| 665 | #define LDO_VCC_LMTVTH_MASK 0x30 | ||
| 666 | #define LDO_VCC_LMTVTH_2A 0x10 | ||
| 667 | |||
| 668 | #define LDO_VCC_CFG1 0xFF73 | ||
| 669 | #define LDO_VCC_REF_TUNE_MASK 0x30 | ||
| 670 | #define LDO_VCC_REF_1V2 0x20 | ||
| 671 | #define LDO_VCC_TUNE_MASK 0x07 | ||
| 672 | #define LDO_VCC_1V8 0x04 | ||
| 673 | #define LDO_VCC_3V3 0x07 | ||
| 674 | #define LDO_VCC_LMT_EN 0x08 | ||
| 675 | |||
| 676 | #define LDO_VIO_CFG 0xFF75 | ||
| 677 | #define LDO_VIO_SR_MASK 0xC0 | ||
| 678 | #define LDO_VIO_SR_DF 0x40 | ||
| 679 | #define LDO_VIO_REF_TUNE_MASK 0x30 | ||
| 680 | #define LDO_VIO_REF_1V2 0x20 | ||
| 681 | #define LDO_VIO_TUNE_MASK 0x07 | ||
| 682 | #define LDO_VIO_1V7 0x03 | ||
| 683 | #define LDO_VIO_1V8 0x04 | ||
| 684 | #define LDO_VIO_3V3 0x07 | ||
| 685 | |||
| 686 | #define LDO_DV12S_CFG 0xFF76 | ||
| 687 | #define LDO_REF12_TUNE_MASK 0x18 | ||
| 688 | #define LDO_REF12_TUNE_DF 0x10 | ||
| 689 | #define LDO_D12_TUNE_MASK 0x07 | ||
| 690 | #define LDO_D12_TUNE_DF 0x04 | ||
| 691 | |||
| 692 | #define LDO_AV12S_CFG 0xFF77 | ||
| 693 | #define LDO_AV12S_TUNE_MASK 0x07 | ||
| 694 | #define LDO_AV12S_TUNE_DF 0x04 | ||
| 695 | |||
| 696 | #define SD40_LDO_CTL1 0xFE7D | ||
| 697 | #define SD40_VIO_TUNE_MASK 0x70 | ||
| 698 | #define SD40_VIO_TUNE_1V7 0x30 | ||
| 699 | #define SD_VIO_LDO_1V8 0x40 | ||
| 700 | #define SD_VIO_LDO_3V3 0x70 | ||
| 701 | |||
| 631 | /* Phy register */ | 702 | /* Phy register */ |
| 632 | #define PHY_PCR 0x00 | 703 | #define PHY_PCR 0x00 |
| 633 | #define PHY_PCR_FORCE_CODE 0xB000 | 704 | #define PHY_PCR_FORCE_CODE 0xB000 |
| @@ -641,6 +712,10 @@ | |||
| 641 | #define PHY_RCR1 0x02 | 712 | #define PHY_RCR1 0x02 |
| 642 | #define PHY_RCR1_ADP_TIME_4 0x0400 | 713 | #define PHY_RCR1_ADP_TIME_4 0x0400 |
| 643 | #define PHY_RCR1_VCO_COARSE 0x001F | 714 | #define PHY_RCR1_VCO_COARSE 0x001F |
| 715 | #define PHY_SSCCR2 0x02 | ||
| 716 | #define PHY_SSCCR2_PLL_NCODE 0x0A00 | ||
| 717 | #define PHY_SSCCR2_TIME0 0x001C | ||
| 718 | #define PHY_SSCCR2_TIME2_WIDTH 0x0003 | ||
| 644 | 719 | ||
| 645 | #define PHY_RCR2 0x03 | 720 | #define PHY_RCR2 0x03 |
| 646 | #define PHY_RCR2_EMPHASE_EN 0x8000 | 721 | #define PHY_RCR2_EMPHASE_EN 0x8000 |
| @@ -649,6 +724,9 @@ | |||
| 649 | #define PHY_RCR2_FREQSEL_12 0x0040 | 724 | #define PHY_RCR2_FREQSEL_12 0x0040 |
| 650 | #define PHY_RCR2_CDR_SC_12P 0x0010 | 725 | #define PHY_RCR2_CDR_SC_12P 0x0010 |
| 651 | #define PHY_RCR2_CALIB_LATE 0x0002 | 726 | #define PHY_RCR2_CALIB_LATE 0x0002 |
| 727 | #define PHY_SSCCR3 0x03 | ||
| 728 | #define PHY_SSCCR3_STEP_IN 0x2740 | ||
| 729 | #define PHY_SSCCR3_CHECK_DELAY 0x0008 | ||
| 652 | 730 | ||
| 653 | #define PHY_RTCR 0x04 | 731 | #define PHY_RTCR 0x04 |
| 654 | #define PHY_RDR 0x05 | 732 | #define PHY_RDR 0x05 |
| @@ -663,6 +741,16 @@ | |||
| 663 | #define PHY_TUNE_TUNED18 0x01C0 | 741 | #define PHY_TUNE_TUNED18 0x01C0 |
| 664 | #define PHY_TUNE_TUNED12 0X0020 | 742 | #define PHY_TUNE_TUNED12 0X0020 |
| 665 | #define PHY_TUNE_TUNEA12 0x0004 | 743 | #define PHY_TUNE_TUNEA12 0x0004 |
| 744 | #define PHY_TUNE_VOLTAGE_MASK 0xFC3F | ||
| 745 | #define PHY_TUNE_VOLTAGE_3V3 0x03C0 | ||
| 746 | #define PHY_TUNE_D18_1V8 0x0100 | ||
| 747 | #define PHY_TUNE_D18_1V7 0x0080 | ||
| 748 | #define PHY_ANA08 0x08 | ||
| 749 | #define PHY_ANA08_RX_EQ_DCGAIN 0x5000 | ||
| 750 | #define PHY_ANA08_SEL_RX_EN 0x0400 | ||
| 751 | #define PHY_ANA08_RX_EQ_VAL 0x03C0 | ||
| 752 | #define PHY_ANA08_SCP 0x0020 | ||
| 753 | #define PHY_ANA08_SEL_IPI 0x0004 | ||
| 666 | 754 | ||
| 667 | #define PHY_IMR 0x09 | 755 | #define PHY_IMR 0x09 |
| 668 | #define PHY_BPCR 0x0A | 756 | #define PHY_BPCR 0x0A |
| @@ -678,6 +766,7 @@ | |||
| 678 | #define PHY_HOST_CLK_CTRL 0x0F | 766 | #define PHY_HOST_CLK_CTRL 0x0F |
| 679 | #define PHY_DMR 0x10 | 767 | #define PHY_DMR 0x10 |
| 680 | #define PHY_BACR 0x11 | 768 | #define PHY_BACR 0x11 |
| 769 | #define PHY_BACR_BASIC_MASK 0xFFF3 | ||
| 681 | #define PHY_IER 0x12 | 770 | #define PHY_IER 0x12 |
| 682 | #define PHY_BCSR 0x13 | 771 | #define PHY_BCSR 0x13 |
| 683 | #define PHY_BPR 0x14 | 772 | #define PHY_BPR 0x14 |
| @@ -698,12 +787,19 @@ | |||
| 698 | #define PHY_REV_STOP_CLKWR 0x0004 | 787 | #define PHY_REV_STOP_CLKWR 0x0004 |
| 699 | 788 | ||
| 700 | #define PHY_FLD0 0x1A | 789 | #define PHY_FLD0 0x1A |
| 790 | #define PHY_ANA1A 0x1A | ||
| 791 | #define PHY_ANA1A_TXR_LOOPBACK 0x2000 | ||
| 792 | #define PHY_ANA1A_RXT_BIST 0x0500 | ||
| 793 | #define PHY_ANA1A_TXR_BIST 0x0040 | ||
| 794 | #define PHY_ANA1A_REV 0x0006 | ||
| 701 | #define PHY_FLD1 0x1B | 795 | #define PHY_FLD1 0x1B |
| 702 | #define PHY_FLD2 0x1C | 796 | #define PHY_FLD2 0x1C |
| 703 | #define PHY_FLD3 0x1D | 797 | #define PHY_FLD3 0x1D |
| 704 | #define PHY_FLD3_TIMER_4 0x0800 | 798 | #define PHY_FLD3_TIMER_4 0x0800 |
| 705 | #define PHY_FLD3_TIMER_6 0x0020 | 799 | #define PHY_FLD3_TIMER_6 0x0020 |
| 706 | #define PHY_FLD3_RXDELINK 0x0004 | 800 | #define PHY_FLD3_RXDELINK 0x0004 |
| 801 | #define PHY_ANA1D 0x1D | ||
| 802 | #define PHY_ANA1D_DEBUG_ADDR 0x0004 | ||
| 707 | 803 | ||
| 708 | #define PHY_FLD4 0x1E | 804 | #define PHY_FLD4 0x1E |
| 709 | #define PHY_FLD4_FLDEN_SEL 0x4000 | 805 | #define PHY_FLD4_FLDEN_SEL 0x4000 |
| @@ -713,7 +809,18 @@ | |||
| 713 | #define PHY_FLD4_BER_COUNT 0x00E0 | 809 | #define PHY_FLD4_BER_COUNT 0x00E0 |
| 714 | #define PHY_FLD4_BER_TIMER 0x000A | 810 | #define PHY_FLD4_BER_TIMER 0x000A |
| 715 | #define PHY_FLD4_BER_CHK_EN 0x0001 | 811 | #define PHY_FLD4_BER_CHK_EN 0x0001 |
| 716 | 812 | #define PHY_DIG1E 0x1E | |
| 813 | #define PHY_DIG1E_REV 0x4000 | ||
| 814 | #define PHY_DIG1E_D0_X_D1 0x1000 | ||
| 815 | #define PHY_DIG1E_RX_ON_HOST 0x0800 | ||
| 816 | #define PHY_DIG1E_RCLK_REF_HOST 0x0400 | ||
| 817 | #define PHY_DIG1E_RCLK_TX_EN_KEEP 0x0040 | ||
| 818 | #define PHY_DIG1E_RCLK_TX_TERM_KEEP 0x0020 | ||
| 819 | #define PHY_DIG1E_RCLK_RX_EIDLE_ON 0x0010 | ||
| 820 | #define PHY_DIG1E_TX_TERM_KEEP 0x0008 | ||
| 821 | #define PHY_DIG1E_RX_TERM_KEEP 0x0004 | ||
| 822 | #define PHY_DIG1E_TX_EN_KEEP 0x0002 | ||
| 823 | #define PHY_DIG1E_RX_EN_KEEP 0x0001 | ||
| 717 | #define PHY_DUM_REG 0x1F | 824 | #define PHY_DUM_REG 0x1F |
| 718 | 825 | ||
| 719 | #define PCR_SETTING_REG1 0x724 | 826 | #define PCR_SETTING_REG1 0x724 |
| @@ -729,6 +836,8 @@ struct pcr_handle { | |||
| 729 | }; | 836 | }; |
| 730 | 837 | ||
| 731 | struct pcr_ops { | 838 | struct pcr_ops { |
| 839 | int (*write_phy)(struct rtsx_pcr *pcr, u8 addr, u16 val); | ||
| 840 | int (*read_phy)(struct rtsx_pcr *pcr, u8 addr, u16 *val); | ||
| 732 | int (*extra_init_hw)(struct rtsx_pcr *pcr); | 841 | int (*extra_init_hw)(struct rtsx_pcr *pcr); |
| 733 | int (*optimize_phy)(struct rtsx_pcr *pcr); | 842 | int (*optimize_phy)(struct rtsx_pcr *pcr); |
| 734 | int (*turn_on_led)(struct rtsx_pcr *pcr); | 843 | int (*turn_on_led)(struct rtsx_pcr *pcr); |
| @@ -823,6 +932,8 @@ struct rtsx_pcr { | |||
| 823 | const struct pcr_ops *ops; | 932 | const struct pcr_ops *ops; |
| 824 | enum PDEV_STAT state; | 933 | enum PDEV_STAT state; |
| 825 | 934 | ||
| 935 | u16 reg_pm_ctrl3; | ||
| 936 | |||
| 826 | int num_slots; | 937 | int num_slots; |
| 827 | struct rtsx_slot *slots; | 938 | struct rtsx_slot *slots; |
| 828 | }; | 939 | }; |
| @@ -830,6 +941,10 @@ struct rtsx_pcr { | |||
| 830 | #define CHK_PCI_PID(pcr, pid) ((pcr)->pci->device == (pid)) | 941 | #define CHK_PCI_PID(pcr, pid) ((pcr)->pci->device == (pid)) |
| 831 | #define PCI_VID(pcr) ((pcr)->pci->vendor) | 942 | #define PCI_VID(pcr) ((pcr)->pci->vendor) |
| 832 | #define PCI_PID(pcr) ((pcr)->pci->device) | 943 | #define PCI_PID(pcr) ((pcr)->pci->device) |
| 944 | #define is_version(pcr, pid, ver) \ | ||
| 945 | (CHK_PCI_PID(pcr, pid) && (pcr)->ic_version == (ver)) | ||
| 946 | #define pcr_dbg(pcr, fmt, arg...) \ | ||
| 947 | dev_dbg(&(pcr)->pci->dev, fmt, ##arg) | ||
| 833 | 948 | ||
| 834 | #define SDR104_PHASE(val) ((val) & 0xFF) | 949 | #define SDR104_PHASE(val) ((val) & 0xFF) |
| 835 | #define SDR50_PHASE(val) (((val) >> 8) & 0xFF) | 950 | #define SDR50_PHASE(val) (((val) >> 8) & 0xFF) |
| @@ -899,4 +1014,17 @@ static inline void rtsx_pci_write_be32(struct rtsx_pcr *pcr, u16 reg, u32 val) | |||
| 899 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg + 3, 0xFF, val); | 1014 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg + 3, 0xFF, val); |
| 900 | } | 1015 | } |
| 901 | 1016 | ||
| 1017 | static inline int rtsx_pci_update_phy(struct rtsx_pcr *pcr, u8 addr, | ||
| 1018 | u16 mask, u16 append) | ||
| 1019 | { | ||
| 1020 | int err; | ||
| 1021 | u16 val; | ||
| 1022 | |||
| 1023 | err = rtsx_pci_read_phy_register(pcr, addr, &val); | ||
| 1024 | if (err < 0) | ||
| 1025 | return err; | ||
| 1026 | |||
| 1027 | return rtsx_pci_write_phy_register(pcr, addr, (val & mask) | append); | ||
| 1028 | } | ||
| 1029 | |||
| 902 | #endif | 1030 | #endif |
