|
@@ -367,3 +367,109 @@
|
|
|
#define SA1111_INTC 0x1600
|
|
|
|
|
|
/*
|
|
|
+ * These are offsets from the above base.
|
|
|
+ */
|
|
|
+#define SA1111_INTTEST0 0x0000
|
|
|
+#define SA1111_INTTEST1 0x0004
|
|
|
+#define SA1111_INTEN0 0x0008
|
|
|
+#define SA1111_INTEN1 0x000c
|
|
|
+#define SA1111_INTPOL0 0x0010
|
|
|
+#define SA1111_INTPOL1 0x0014
|
|
|
+#define SA1111_INTTSTSEL 0x0018
|
|
|
+#define SA1111_INTSTATCLR0 0x001c
|
|
|
+#define SA1111_INTSTATCLR1 0x0020
|
|
|
+#define SA1111_INTSET0 0x0024
|
|
|
+#define SA1111_INTSET1 0x0028
|
|
|
+#define SA1111_WAKEEN0 0x002c
|
|
|
+#define SA1111_WAKEEN1 0x0030
|
|
|
+#define SA1111_WAKEPOL0 0x0034
|
|
|
+#define SA1111_WAKEPOL1 0x0038
|
|
|
+
|
|
|
+/* PS/2 Trackpad and Mouse Interfaces */
|
|
|
+#define SA1111_KBD 0x0a00
|
|
|
+#define SA1111_MSE 0x0c00
|
|
|
+
|
|
|
+/* PCMCIA Interface */
|
|
|
+#define SA1111_PCMCIA 0x1600
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+extern struct bus_type sa1111_bus_type;
|
|
|
+
|
|
|
+#define SA1111_DEVID_SBI (1 << 0)
|
|
|
+#define SA1111_DEVID_SK (1 << 1)
|
|
|
+#define SA1111_DEVID_USB (1 << 2)
|
|
|
+#define SA1111_DEVID_SAC (1 << 3)
|
|
|
+#define SA1111_DEVID_SSP (1 << 4)
|
|
|
+#define SA1111_DEVID_PS2 (3 << 5)
|
|
|
+#define SA1111_DEVID_PS2_KBD (1 << 5)
|
|
|
+#define SA1111_DEVID_PS2_MSE (1 << 6)
|
|
|
+#define SA1111_DEVID_GPIO (1 << 7)
|
|
|
+#define SA1111_DEVID_INT (1 << 8)
|
|
|
+#define SA1111_DEVID_PCMCIA (1 << 9)
|
|
|
+
|
|
|
+struct sa1111_dev {
|
|
|
+ struct device dev;
|
|
|
+ unsigned int devid;
|
|
|
+ struct resource res;
|
|
|
+ void __iomem *mapbase;
|
|
|
+ unsigned int skpcr_mask;
|
|
|
+ unsigned int irq[6];
|
|
|
+ u64 dma_mask;
|
|
|
+};
|
|
|
+
|
|
|
+#define SA1111_DEV(_d) container_of((_d), struct sa1111_dev, dev)
|
|
|
+
|
|
|
+#define sa1111_get_drvdata(d) dev_get_drvdata(&(d)->dev)
|
|
|
+#define sa1111_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p)
|
|
|
+
|
|
|
+struct sa1111_driver {
|
|
|
+ struct device_driver drv;
|
|
|
+ unsigned int devid;
|
|
|
+ int (*probe)(struct sa1111_dev *);
|
|
|
+ int (*remove)(struct sa1111_dev *);
|
|
|
+ int (*suspend)(struct sa1111_dev *, pm_message_t);
|
|
|
+ int (*resume)(struct sa1111_dev *);
|
|
|
+ void (*shutdown)(struct sa1111_dev *);
|
|
|
+};
|
|
|
+
|
|
|
+#define SA1111_DRV(_d) container_of((_d), struct sa1111_driver, drv)
|
|
|
+
|
|
|
+#define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name)
|
|
|
+
|
|
|
+/*
|
|
|
+ * These frob the SKPCR register, and call platform specific
|
|
|
+ * enable/disable functions.
|
|
|
+ */
|
|
|
+int sa1111_enable_device(struct sa1111_dev *);
|
|
|
+void sa1111_disable_device(struct sa1111_dev *);
|
|
|
+
|
|
|
+unsigned int sa1111_pll_clock(struct sa1111_dev *);
|
|
|
+
|
|
|
+#define SA1111_AUDIO_ACLINK 0
|
|
|
+#define SA1111_AUDIO_I2S 1
|
|
|
+
|
|
|
+void sa1111_select_audio_mode(struct sa1111_dev *sadev, int mode);
|
|
|
+int sa1111_set_audio_rate(struct sa1111_dev *sadev, int rate);
|
|
|
+int sa1111_get_audio_rate(struct sa1111_dev *sadev);
|
|
|
+
|
|
|
+int sa1111_check_dma_bug(dma_addr_t addr);
|
|
|
+
|
|
|
+int sa1111_driver_register(struct sa1111_driver *);
|
|
|
+void sa1111_driver_unregister(struct sa1111_driver *);
|
|
|
+
|
|
|
+void sa1111_set_io_dir(struct sa1111_dev *sadev, unsigned int bits, unsigned int dir, unsigned int sleep_dir);
|
|
|
+void sa1111_set_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v);
|
|
|
+void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned int v);
|
|
|
+
|
|
|
+struct sa1111_platform_data {
|
|
|
+ int irq_base; /* base for cascaded on-chip IRQs */
|
|
|
+ unsigned disable_devs;
|
|
|
+ void *data;
|
|
|
+ int (*enable)(void *, unsigned);
|
|
|
+ void (*disable)(void *, unsigned);
|
|
|
+};
|
|
|
+
|
|
|
+#endif /* _ASM_ARCH_SA1111 */
|