Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * arch/arm/include/asm/hardware/sa1111.h
0004  *
0005  * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu>
0006  *
0007  * This file contains definitions for the SA-1111 Companion Chip.
0008  * (Structure and naming borrowed from SA-1101.h, by Peter Danielsson.)
0009  *
0010  * Macro that calculates real address for registers in the SA-1111
0011  */
0012 
0013 #ifndef _ASM_ARCH_SA1111
0014 #define _ASM_ARCH_SA1111
0015 
0016 /*
0017  * Don't ask the (SAC) DMA engines to move less than this amount.
0018  */
0019 
0020 #define SA1111_SAC_DMA_MIN_XFER (0x800)
0021 
0022 /*
0023  * System Bus Interface (SBI)
0024  *
0025  * Registers
0026  *    SKCR  Control Register
0027  *    SMCR  Shared Memory Controller Register
0028  *    SKID  ID Register
0029  */
0030 #define SA1111_SKCR 0x0000
0031 #define SA1111_SMCR 0x0004
0032 #define SA1111_SKID 0x0008
0033 
0034 #define SKCR_PLL_BYPASS (1<<0)
0035 #define SKCR_RCLKEN (1<<1)
0036 #define SKCR_SLEEP  (1<<2)
0037 #define SKCR_DOZE   (1<<3)
0038 #define SKCR_VCO_OFF    (1<<4)
0039 #define SKCR_SCANTSTEN  (1<<5)
0040 #define SKCR_CLKTSTEN   (1<<6)
0041 #define SKCR_RDYEN  (1<<7)
0042 #define SKCR_SELAC  (1<<8)
0043 #define SKCR_OPPC   (1<<9)
0044 #define SKCR_PLLTSTEN   (1<<10)
0045 #define SKCR_USBIOTSTEN (1<<11)
0046 /*
0047  * Don't believe the specs!  Take them, throw them outside.  Leave them
0048  * there for a week.  Spit on them.  Walk on them.  Stamp on them.
0049  * Pour gasoline over them and finally burn them.  Now think about coding.
0050  *  - The October 1999 errata (278260-007) says its bit 13, 1 to enable.
0051  *  - The Feb 2001 errata (278260-010) says that the previous errata
0052  *    (278260-009) is wrong, and its bit actually 12, fixed in spec
0053  *    278242-003.
0054  *  - The SA1111 manual (278242) says bit 12, but 0 to enable.
0055  *  - Reality is bit 13, 1 to enable.
0056  *      -- rmk
0057  */
0058 #define SKCR_OE_EN  (1<<13)
0059 
0060 #define SMCR_DTIM   (1<<0)
0061 #define SMCR_MBGE   (1<<1)
0062 #define SMCR_DRAC_0 (1<<2)
0063 #define SMCR_DRAC_1 (1<<3)
0064 #define SMCR_DRAC_2 (1<<4)
0065 #define SMCR_DRAC   Fld(3, 2)
0066 #define SMCR_CLAT   (1<<5)
0067 
0068 #define SKID_SIREV_MASK (0x000000f0)
0069 #define SKID_MTREV_MASK (0x0000000f)
0070 #define SKID_ID_MASK    (0xffffff00)
0071 #define SKID_SA1111_ID  (0x690cc200)
0072 
0073 /*
0074  * System Controller
0075  *
0076  * Registers
0077  *    SKPCR Power Control Register
0078  *    SKCDR Clock Divider Register
0079  *    SKAUD Audio Clock Divider Register
0080  *    SKPMC PS/2 Mouse Clock Divider Register
0081  *    SKPTC PS/2 Track Pad Clock Divider Register
0082  *    SKPEN0    PWM0 Enable Register
0083  *    SKPWM0    PWM0 Clock Register
0084  *    SKPEN1    PWM1 Enable Register
0085  *    SKPWM1    PWM1 Clock Register
0086  */
0087 #define SA1111_SKPCR    0x0200
0088 #define SA1111_SKCDR    0x0204
0089 #define SA1111_SKAUD    0x0208
0090 #define SA1111_SKPMC    0x020c
0091 #define SA1111_SKPTC    0x0210
0092 #define SA1111_SKPEN0   0x0214
0093 #define SA1111_SKPWM0   0x0218
0094 #define SA1111_SKPEN1   0x021c
0095 #define SA1111_SKPWM1   0x0220
0096 
0097 #define SKPCR_UCLKEN    (1<<0)
0098 #define SKPCR_ACCLKEN   (1<<1)
0099 #define SKPCR_I2SCLKEN  (1<<2)
0100 #define SKPCR_L3CLKEN   (1<<3)
0101 #define SKPCR_SCLKEN    (1<<4)
0102 #define SKPCR_PMCLKEN   (1<<5)
0103 #define SKPCR_PTCLKEN   (1<<6)
0104 #define SKPCR_DCLKEN    (1<<7)
0105 #define SKPCR_PWMCLKEN  (1<<8)
0106 
0107 /* USB Host controller */
0108 #define SA1111_USB      0x0400
0109 
0110 /*
0111  * Serial Audio Controller
0112  *
0113  * Registers
0114  *    SACR0             Serial Audio Common Control Register
0115  *    SACR1             Serial Audio Alternate Mode (I2C/MSB) Control Register
0116  *    SACR2             Serial Audio AC-link Control Register
0117  *    SASR0             Serial Audio I2S/MSB Interface & FIFO Status Register
0118  *    SASR1             Serial Audio AC-link Interface & FIFO Status Register
0119  *    SASCR             Serial Audio Status Clear Register
0120  *    L3_CAR            L3 Control Bus Address Register
0121  *    L3_CDR            L3 Control Bus Data Register
0122  *    ACCAR             AC-link Command Address Register
0123  *    ACCDR             AC-link Command Data Register
0124  *    ACSAR             AC-link Status Address Register
0125  *    ACSDR             AC-link Status Data Register
0126  *    SADTCS            Serial Audio DMA Transmit Control/Status Register
0127  *    SADTSA            Serial Audio DMA Transmit Buffer Start Address A
0128  *    SADTCA            Serial Audio DMA Transmit Buffer Count Register A
0129  *    SADTSB            Serial Audio DMA Transmit Buffer Start Address B
0130  *    SADTCB            Serial Audio DMA Transmit Buffer Count Register B
0131  *    SADRCS            Serial Audio DMA Receive Control/Status Register
0132  *    SADRSA            Serial Audio DMA Receive Buffer Start Address A
0133  *    SADRCA            Serial Audio DMA Receive Buffer Count Register A
0134  *    SADRSB            Serial Audio DMA Receive Buffer Start Address B
0135  *    SADRCB            Serial Audio DMA Receive Buffer Count Register B
0136  *    SAITR             Serial Audio Interrupt Test Register
0137  *    SADR              Serial Audio Data Register (16 x 32-bit)
0138  */
0139 
0140 #define SA1111_SERAUDIO     0x0600
0141 
0142 /*
0143  * These are offsets from the above base.
0144  */
0145 #define SA1111_SACR0        0x00
0146 #define SA1111_SACR1        0x04
0147 #define SA1111_SACR2        0x08
0148 #define SA1111_SASR0        0x0c
0149 #define SA1111_SASR1        0x10
0150 #define SA1111_SASCR        0x18
0151 #define SA1111_L3_CAR       0x1c
0152 #define SA1111_L3_CDR       0x20
0153 #define SA1111_ACCAR        0x24
0154 #define SA1111_ACCDR        0x28
0155 #define SA1111_ACSAR        0x2c
0156 #define SA1111_ACSDR        0x30
0157 #define SA1111_SADTCS       0x34
0158 #define SA1111_SADTSA       0x38
0159 #define SA1111_SADTCA       0x3c
0160 #define SA1111_SADTSB       0x40
0161 #define SA1111_SADTCB       0x44
0162 #define SA1111_SADRCS       0x48
0163 #define SA1111_SADRSA       0x4c
0164 #define SA1111_SADRCA       0x50
0165 #define SA1111_SADRSB       0x54
0166 #define SA1111_SADRCB       0x58
0167 #define SA1111_SAITR        0x5c
0168 #define SA1111_SADR     0x80
0169 
0170 #ifndef CONFIG_ARCH_PXA
0171 
0172 #define SACR0_ENB   (1<<0)
0173 #define SACR0_BCKD  (1<<2)
0174 #define SACR0_RST   (1<<3)
0175 
0176 #define SACR1_AMSL  (1<<0)
0177 #define SACR1_L3EN  (1<<1)
0178 #define SACR1_L3MB  (1<<2)
0179 #define SACR1_DREC  (1<<3)
0180 #define SACR1_DRPL  (1<<4)
0181 #define SACR1_ENLBF (1<<5)
0182 
0183 #define SACR2_TS3V  (1<<0)
0184 #define SACR2_TS4V  (1<<1)
0185 #define SACR2_WKUP  (1<<2)
0186 #define SACR2_DREC  (1<<3)
0187 #define SACR2_DRPL  (1<<4)
0188 #define SACR2_ENLBF (1<<5)
0189 #define SACR2_RESET (1<<6)
0190 
0191 #define SASR0_TNF   (1<<0)
0192 #define SASR0_RNE   (1<<1)
0193 #define SASR0_BSY   (1<<2)
0194 #define SASR0_TFS   (1<<3)
0195 #define SASR0_RFS   (1<<4)
0196 #define SASR0_TUR   (1<<5)
0197 #define SASR0_ROR   (1<<6)
0198 #define SASR0_L3WD  (1<<16)
0199 #define SASR0_L3RD  (1<<17)
0200 
0201 #define SASR1_TNF   (1<<0)
0202 #define SASR1_RNE   (1<<1)
0203 #define SASR1_BSY   (1<<2)
0204 #define SASR1_TFS   (1<<3)
0205 #define SASR1_RFS   (1<<4)
0206 #define SASR1_TUR   (1<<5)
0207 #define SASR1_ROR   (1<<6)
0208 #define SASR1_CADT  (1<<16)
0209 #define SASR1_SADR  (1<<17)
0210 #define SASR1_RSTO  (1<<18)
0211 #define SASR1_CLPM  (1<<19)
0212 #define SASR1_CRDY  (1<<20)
0213 #define SASR1_RS3V  (1<<21)
0214 #define SASR1_RS4V  (1<<22)
0215 
0216 #define SASCR_TUR   (1<<5)
0217 #define SASCR_ROR   (1<<6)
0218 #define SASCR_DTS   (1<<16)
0219 #define SASCR_RDD   (1<<17)
0220 #define SASCR_STO   (1<<18)
0221 
0222 #define SADTCS_TDEN (1<<0)
0223 #define SADTCS_TDIE (1<<1)
0224 #define SADTCS_TDBDA    (1<<3)
0225 #define SADTCS_TDSTA    (1<<4)
0226 #define SADTCS_TDBDB    (1<<5)
0227 #define SADTCS_TDSTB    (1<<6)
0228 #define SADTCS_TBIU (1<<7)
0229 
0230 #define SADRCS_RDEN (1<<0)
0231 #define SADRCS_RDIE (1<<1)
0232 #define SADRCS_RDBDA    (1<<3)
0233 #define SADRCS_RDSTA    (1<<4)
0234 #define SADRCS_RDBDB    (1<<5)
0235 #define SADRCS_RDSTB    (1<<6)
0236 #define SADRCS_RBIU (1<<7)
0237 
0238 #define SAD_CS_DEN  (1<<0)
0239 #define SAD_CS_DIE  (1<<1)  /* Not functional on metal 1 */
0240 #define SAD_CS_DBDA (1<<3)  /* Not functional on metal 1 */
0241 #define SAD_CS_DSTA (1<<4)
0242 #define SAD_CS_DBDB (1<<5)  /* Not functional on metal 1 */
0243 #define SAD_CS_DSTB (1<<6)
0244 #define SAD_CS_BIU  (1<<7)  /* Not functional on metal 1 */
0245 
0246 #define SAITR_TFS   (1<<0)
0247 #define SAITR_RFS   (1<<1)
0248 #define SAITR_TUR   (1<<2)
0249 #define SAITR_ROR   (1<<3)
0250 #define SAITR_CADT  (1<<4)
0251 #define SAITR_SADR  (1<<5)
0252 #define SAITR_RSTO  (1<<6)
0253 #define SAITR_TDBDA (1<<8)
0254 #define SAITR_TDBDB (1<<9)
0255 #define SAITR_RDBDA (1<<10)
0256 #define SAITR_RDBDB (1<<11)
0257 
0258 #endif  /* !CONFIG_ARCH_PXA */
0259 
0260 /*
0261  * General-Purpose I/O Interface
0262  *
0263  * Registers
0264  *    PA_DDR        GPIO Block A Data Direction
0265  *    PA_DRR/PA_DWR GPIO Block A Data Value Register (read/write)
0266  *    PA_SDR        GPIO Block A Sleep Direction
0267  *    PA_SSR        GPIO Block A Sleep State
0268  *    PB_DDR        GPIO Block B Data Direction
0269  *    PB_DRR/PB_DWR GPIO Block B Data Value Register (read/write)
0270  *    PB_SDR        GPIO Block B Sleep Direction
0271  *    PB_SSR        GPIO Block B Sleep State
0272  *    PC_DDR        GPIO Block C Data Direction
0273  *    PC_DRR/PC_DWR GPIO Block C Data Value Register (read/write)
0274  *    PC_SDR        GPIO Block C Sleep Direction
0275  *    PC_SSR        GPIO Block C Sleep State
0276  */
0277 
0278 #define SA1111_GPIO 0x1000
0279 
0280 #define SA1111_GPIO_PADDR   (0x000)
0281 #define SA1111_GPIO_PADRR   (0x004)
0282 #define SA1111_GPIO_PADWR   (0x004)
0283 #define SA1111_GPIO_PASDR   (0x008)
0284 #define SA1111_GPIO_PASSR   (0x00c)
0285 #define SA1111_GPIO_PBDDR   (0x010)
0286 #define SA1111_GPIO_PBDRR   (0x014)
0287 #define SA1111_GPIO_PBDWR   (0x014)
0288 #define SA1111_GPIO_PBSDR   (0x018)
0289 #define SA1111_GPIO_PBSSR   (0x01c)
0290 #define SA1111_GPIO_PCDDR   (0x020)
0291 #define SA1111_GPIO_PCDRR   (0x024)
0292 #define SA1111_GPIO_PCDWR   (0x024)
0293 #define SA1111_GPIO_PCSDR   (0x028)
0294 #define SA1111_GPIO_PCSSR   (0x02c)
0295 
0296 #define GPIO_A0     (1 << 0)
0297 #define GPIO_A1     (1 << 1)
0298 #define GPIO_A2     (1 << 2)
0299 #define GPIO_A3     (1 << 3)
0300 
0301 #define GPIO_B0     (1 << 8)
0302 #define GPIO_B1     (1 << 9)
0303 #define GPIO_B2     (1 << 10)
0304 #define GPIO_B3     (1 << 11)
0305 #define GPIO_B4     (1 << 12)
0306 #define GPIO_B5     (1 << 13)
0307 #define GPIO_B6     (1 << 14)
0308 #define GPIO_B7     (1 << 15)
0309 
0310 #define GPIO_C0     (1 << 16)
0311 #define GPIO_C1     (1 << 17)
0312 #define GPIO_C2     (1 << 18)
0313 #define GPIO_C3     (1 << 19)
0314 #define GPIO_C4     (1 << 20)
0315 #define GPIO_C5     (1 << 21)
0316 #define GPIO_C6     (1 << 22)
0317 #define GPIO_C7     (1 << 23)
0318 
0319 /*
0320  * Interrupt Controller
0321  *
0322  * Registers
0323  *    INTTEST0      Test register 0
0324  *    INTTEST1      Test register 1
0325  *    INTEN0        Interrupt Enable register 0
0326  *    INTEN1        Interrupt Enable register 1
0327  *    INTPOL0       Interrupt Polarity selection 0
0328  *    INTPOL1       Interrupt Polarity selection 1
0329  *    INTTSTSEL     Interrupt source selection
0330  *    INTSTATCLR0   Interrupt Status/Clear 0
0331  *    INTSTATCLR1   Interrupt Status/Clear 1
0332  *    INTSET0       Interrupt source set 0
0333  *    INTSET1       Interrupt source set 1
0334  *    WAKE_EN0      Wake-up source enable 0
0335  *    WAKE_EN1      Wake-up source enable 1
0336  *    WAKE_POL0     Wake-up polarity selection 0
0337  *    WAKE_POL1     Wake-up polarity selection 1
0338  */
0339 #define SA1111_INTC     0x1600
0340 
0341 /*
0342  * These are offsets from the above base.
0343  */
0344 #define SA1111_INTTEST0     0x0000
0345 #define SA1111_INTTEST1     0x0004
0346 #define SA1111_INTEN0       0x0008
0347 #define SA1111_INTEN1       0x000c
0348 #define SA1111_INTPOL0      0x0010
0349 #define SA1111_INTPOL1      0x0014
0350 #define SA1111_INTTSTSEL    0x0018
0351 #define SA1111_INTSTATCLR0  0x001c
0352 #define SA1111_INTSTATCLR1  0x0020
0353 #define SA1111_INTSET0      0x0024
0354 #define SA1111_INTSET1      0x0028
0355 #define SA1111_WAKEEN0      0x002c
0356 #define SA1111_WAKEEN1      0x0030
0357 #define SA1111_WAKEPOL0     0x0034
0358 #define SA1111_WAKEPOL1     0x0038
0359 
0360 /* PS/2 Trackpad and Mouse Interfaces */
0361 #define SA1111_KBD      0x0a00
0362 #define SA1111_MSE      0x0c00
0363 
0364 /* PCMCIA Interface */
0365 #define SA1111_PCMCIA       0x1600
0366 
0367 
0368 
0369 
0370 
0371 extern struct bus_type sa1111_bus_type;
0372 
0373 #define SA1111_DEVID_SBI    (1 << 0)
0374 #define SA1111_DEVID_SK     (1 << 1)
0375 #define SA1111_DEVID_USB    (1 << 2)
0376 #define SA1111_DEVID_SAC    (1 << 3)
0377 #define SA1111_DEVID_SSP    (1 << 4)
0378 #define SA1111_DEVID_PS2    (3 << 5)
0379 #define SA1111_DEVID_PS2_KBD    (1 << 5)
0380 #define SA1111_DEVID_PS2_MSE    (1 << 6)
0381 #define SA1111_DEVID_GPIO   (1 << 7)
0382 #define SA1111_DEVID_INT    (1 << 8)
0383 #define SA1111_DEVID_PCMCIA (1 << 9)
0384 
0385 struct sa1111_dev {
0386     struct device   dev;
0387     unsigned int    devid;
0388     struct resource res;
0389     void __iomem    *mapbase;
0390     unsigned int    skpcr_mask;
0391     unsigned int    hwirq[6];
0392     u64     dma_mask;
0393 };
0394 
0395 #define to_sa1111_device(x) container_of(x, struct sa1111_dev, dev)
0396 
0397 #define sa1111_get_drvdata(d)   dev_get_drvdata(&(d)->dev)
0398 #define sa1111_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p)
0399 
0400 struct sa1111_driver {
0401     struct device_driver    drv;
0402     unsigned int        devid;
0403     int (*probe)(struct sa1111_dev *);
0404     void (*remove)(struct sa1111_dev *);
0405 };
0406 
0407 #define SA1111_DRV(_d)  container_of((_d), struct sa1111_driver, drv)
0408 
0409 #define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name)
0410 
0411 /*
0412  * These frob the SKPCR register, and call platform specific
0413  * enable/disable functions.
0414  */
0415 int sa1111_enable_device(struct sa1111_dev *);
0416 void sa1111_disable_device(struct sa1111_dev *);
0417 
0418 int sa1111_get_irq(struct sa1111_dev *, unsigned num);
0419 
0420 unsigned int sa1111_pll_clock(struct sa1111_dev *);
0421 
0422 #define SA1111_AUDIO_ACLINK 0
0423 #define SA1111_AUDIO_I2S    1
0424 
0425 void sa1111_select_audio_mode(struct sa1111_dev *sadev, int mode);
0426 int sa1111_set_audio_rate(struct sa1111_dev *sadev, int rate);
0427 int sa1111_get_audio_rate(struct sa1111_dev *sadev);
0428 
0429 int sa1111_check_dma_bug(dma_addr_t addr);
0430 
0431 int sa1111_driver_register(struct sa1111_driver *);
0432 void sa1111_driver_unregister(struct sa1111_driver *);
0433 
0434 struct sa1111_platform_data {
0435     int irq_base;   /* base for cascaded on-chip IRQs */
0436     unsigned disable_devs;
0437     void    *data;
0438     int (*enable)(void *, unsigned);
0439     void    (*disable)(void *, unsigned);
0440 };
0441 
0442 #endif  /* _ASM_ARCH_SA1111 */