xref: /OK3568_Linux_fs/kernel/arch/arm/mach-iop32x/i2c.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * arch/arm/plat-iop/i2c.c
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Author: Nicolas Pitre <nico@cam.org>
6*4882a593Smuzhiyun  * Copyright (C) 2001 MontaVista Software, Inc.
7*4882a593Smuzhiyun  * Copyright (C) 2004 Intel Corporation.
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/mm.h>
11*4882a593Smuzhiyun #include <linux/init.h>
12*4882a593Smuzhiyun #include <linux/major.h>
13*4882a593Smuzhiyun #include <linux/fs.h>
14*4882a593Smuzhiyun #include <linux/platform_device.h>
15*4882a593Smuzhiyun #include <linux/serial.h>
16*4882a593Smuzhiyun #include <linux/tty.h>
17*4882a593Smuzhiyun #include <linux/serial_core.h>
18*4882a593Smuzhiyun #include <linux/io.h>
19*4882a593Smuzhiyun #include <linux/gpio/machine.h>
20*4882a593Smuzhiyun #include <asm/page.h>
21*4882a593Smuzhiyun #include <asm/mach/map.h>
22*4882a593Smuzhiyun #include <asm/setup.h>
23*4882a593Smuzhiyun #include <asm/memory.h>
24*4882a593Smuzhiyun #include <asm/mach/arch.h>
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #include "hardware.h"
27*4882a593Smuzhiyun #include "iop3xx.h"
28*4882a593Smuzhiyun #include "irqs.h"
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /*
31*4882a593Smuzhiyun  * Each of the I2C busses have corresponding GPIO lines, and the driver
32*4882a593Smuzhiyun  * need to access these directly to drive the bus low at times.
33*4882a593Smuzhiyun  */
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun struct gpiod_lookup_table iop3xx_i2c0_gpio_lookup = {
36*4882a593Smuzhiyun 	.dev_id = "IOP3xx-I2C.0",
37*4882a593Smuzhiyun 	.table = {
38*4882a593Smuzhiyun 		GPIO_LOOKUP("gpio-iop", 7, "scl", GPIO_ACTIVE_HIGH),
39*4882a593Smuzhiyun 		GPIO_LOOKUP("gpio-iop", 6, "sda", GPIO_ACTIVE_HIGH),
40*4882a593Smuzhiyun 		{ }
41*4882a593Smuzhiyun 	},
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct gpiod_lookup_table iop3xx_i2c1_gpio_lookup = {
45*4882a593Smuzhiyun 	.dev_id = "IOP3xx-I2C.1",
46*4882a593Smuzhiyun 	.table = {
47*4882a593Smuzhiyun 		GPIO_LOOKUP("gpio-iop", 5, "scl", GPIO_ACTIVE_HIGH),
48*4882a593Smuzhiyun 		GPIO_LOOKUP("gpio-iop", 4, "sda", GPIO_ACTIVE_HIGH),
49*4882a593Smuzhiyun 		{ }
50*4882a593Smuzhiyun 	},
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun static struct resource iop3xx_i2c0_resources[] = {
54*4882a593Smuzhiyun 	[0] = {
55*4882a593Smuzhiyun 		.start	= 0xfffff680,
56*4882a593Smuzhiyun 		.end	= 0xfffff697,
57*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
58*4882a593Smuzhiyun 	},
59*4882a593Smuzhiyun 	[1] = {
60*4882a593Smuzhiyun 		.start	= IRQ_IOP32X_I2C_0,
61*4882a593Smuzhiyun 		.end	= IRQ_IOP32X_I2C_0,
62*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
63*4882a593Smuzhiyun 	},
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun struct platform_device iop3xx_i2c0_device = {
67*4882a593Smuzhiyun 	.name		= "IOP3xx-I2C",
68*4882a593Smuzhiyun 	.id		= 0,
69*4882a593Smuzhiyun 	.num_resources	= 2,
70*4882a593Smuzhiyun 	.resource	= iop3xx_i2c0_resources,
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun static struct resource iop3xx_i2c1_resources[] = {
75*4882a593Smuzhiyun 	[0] = {
76*4882a593Smuzhiyun 		.start	= 0xfffff6a0,
77*4882a593Smuzhiyun 		.end	= 0xfffff6b7,
78*4882a593Smuzhiyun 		.flags	= IORESOURCE_MEM,
79*4882a593Smuzhiyun 	},
80*4882a593Smuzhiyun 	[1] = {
81*4882a593Smuzhiyun 		.start	= IRQ_IOP32X_I2C_1,
82*4882a593Smuzhiyun 		.end	= IRQ_IOP32X_I2C_1,
83*4882a593Smuzhiyun 		.flags	= IORESOURCE_IRQ,
84*4882a593Smuzhiyun 	}
85*4882a593Smuzhiyun };
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun struct platform_device iop3xx_i2c1_device = {
88*4882a593Smuzhiyun 	.name		= "IOP3xx-I2C",
89*4882a593Smuzhiyun 	.id		= 1,
90*4882a593Smuzhiyun 	.num_resources	= 2,
91*4882a593Smuzhiyun 	.resource	= iop3xx_i2c1_resources,
92*4882a593Smuzhiyun };
93