1 /* linux/arch/arm/plat-s3c/dev-i2c0.c
3 * Copyright 2008-2009 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 * http://armlinux.simtec.co.uk/
7 * S3C series device definition for i2c device 0
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
14 #include <linux/gfp.h>
15 #include <linux/kernel.h>
16 #include <linux/string.h>
17 #include <linux/platform_device.h>
18 #include <linux/clk.h>
19 #include <linux/err.h>
21 #include <mach/irqs.h>
24 #include <plat/regs-iic.h>
26 #include <plat/devs.h>
31 static struct resource s3c_i2c_resource[] = {
34 .end = S3C_PA_IIC + SZ_4K - 1,
35 .flags = IORESOURCE_MEM,
40 .flags = IORESOURCE_IRQ,
44 struct platform_device s3c_device_i2c0 = {
45 .name = "s3c2440-i2c",
46 #ifdef CONFIG_S3C_DEV_I2C1
51 .num_resources = ARRAY_SIZE(s3c_i2c_resource),
52 .resource = s3c_i2c_resource,
55 static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
59 .frequency = 400*1000,
60 .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
63 void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd)
65 struct s3c2410_platform_i2c *npd;
68 pd = &default_i2c_data0;
70 npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL);
72 printk(KERN_ERR "%s: no memory for platform data\n", __func__);
73 else if (!npd->cfg_gpio)
74 npd->cfg_gpio = s3c_i2c0_cfg_gpio;
76 s3c_device_i2c0.dev.platform_data = npd;
78 void s3c_i2c0_force_stop()
82 unsigned long iicstat;
84 regs = ioremap(S3C_PA_IIC, SZ_4K);
86 printk(KERN_ERR "%s, cannot request IO\n", __func__);
90 clk = clk_get(&s3c_device_i2c0.dev, "i2c");
91 if(clk == NULL || IS_ERR(clk)) {
92 printk(KERN_ERR "%s, cannot get cloock\n", __func__);
97 iicstat = readl(regs + S3C2410_IICSTAT);
98 writel(iicstat & ~S3C2410_IICSTAT_TXRXEN, regs + S3C2410_IICSTAT);
103 EXPORT_SYMBOL(s3c_i2c0_force_stop);