12 #include <linux/module.h>
13 #include <linux/kernel.h>
15 #include <linux/errno.h>
19 #include <linux/slab.h>
23 #include <mach/hardware.h>
25 #include <asm/sizes.h>
39 #define CF_BASE 0xfffe2800
42 #define CF_STATUS (CF_BASE + 0x00)
43 # define CF_STATUS_BAD_READ (1 << 2)
44 # define CF_STATUS_BAD_WRITE (1 << 1)
45 # define CF_STATUS_CARD_DETECT (1 << 0)
48 #define CF_CFG (CF_BASE + 0x02)
51 #define CF_CONTROL (CF_BASE + 0x04)
52 # define CF_CONTROL_RESET (1 << 0)
54 #define omap_cf_present() (!(omap_readw(CF_STATUS) & CF_STATUS_CARD_DETECT))
73 #define POLL_INTERVAL (2 * HZ)
83 static void omap_cf_timer(
unsigned long _cf)
91 present ?
"present" :
"gone");
105 omap_cf_timer((
unsigned long)_cf);
147 pr_debug(
"%s: Vcc %d, io_irq %d, flags %04x csc %04x\n",
189 .init = omap_cf_ss_init,
190 .suspend = omap_cf_ss_suspend,
191 .get_status = omap_cf_get_status,
192 .set_socket = omap_cf_set_socket,
193 .set_io_map = omap_cf_set_io_map,
194 .set_mem_map = omap_cf_set_mem_map,
211 seg = (
int) pdev->
dev.platform_data;
212 if (seg == 0 || seg > 3)
224 cf->
timer.function = omap_cf_timer;
228 platform_set_drvdata(pdev, cf);
259 if (!cf->
socket.io_offset)
294 cf->
socket.ops = &omap_cf_ops;
342 static int __init omap_cf_init(
void)
349 static void __exit omap_cf_exit(
void)