| Alessandro Rubini | 63796b7 | 2009-07-02 15:29:22 +0100 | [diff] [blame] | 1 | #include <linux/module.h> | 
 | 2 | #include <linux/init.h> | 
 | 3 | #include <linux/i2c.h> | 
 | 4 | #include <linux/i2c-algo-bit.h> | 
 | 5 | #include <linux/i2c-gpio.h> | 
 | 6 | #include <linux/gpio.h> | 
 | 7 | #include <linux/platform_device.h> | 
 | 8 |  | 
 | 9 | /* | 
 | 10 |  * There are two busses in the 8815NHK. | 
 | 11 |  * They could, in theory, be driven by the hardware component, but we | 
 | 12 |  * use bit-bang through GPIO by now, to keep things simple | 
 | 13 |  */ | 
 | 14 |  | 
 | 15 | static struct i2c_gpio_platform_data nhk8815_i2c_data0 = { | 
 | 16 | 	/* keep defaults for timeouts; pins are push-pull bidirectional */ | 
 | 17 | 	.scl_pin = 62, | 
 | 18 | 	.sda_pin = 63, | 
 | 19 | }; | 
 | 20 |  | 
 | 21 | static struct i2c_gpio_platform_data nhk8815_i2c_data1 = { | 
 | 22 | 	/* keep defaults for timeouts; pins are push-pull bidirectional */ | 
 | 23 | 	.scl_pin = 53, | 
 | 24 | 	.sda_pin = 54, | 
 | 25 | }; | 
 | 26 |  | 
 | 27 | /* first bus: GPIO XX and YY */ | 
 | 28 | static struct platform_device nhk8815_i2c_dev0 = { | 
 | 29 | 	.name	= "i2c-gpio", | 
 | 30 | 	.id	= 0, | 
 | 31 | 	.dev	= { | 
 | 32 | 		.platform_data = &nhk8815_i2c_data0, | 
 | 33 | 	}, | 
 | 34 | }; | 
 | 35 | /* second bus: GPIO XX and YY */ | 
 | 36 | static struct platform_device nhk8815_i2c_dev1 = { | 
 | 37 | 	.name	= "i2c-gpio", | 
 | 38 | 	.id	= 1, | 
 | 39 | 	.dev	= { | 
 | 40 | 		.platform_data = &nhk8815_i2c_data1, | 
 | 41 | 	}, | 
 | 42 | }; | 
 | 43 |  | 
 | 44 | static int __init nhk8815_i2c_init(void) | 
 | 45 | { | 
 | 46 | 	nmk_gpio_set_mode(nhk8815_i2c_data0.scl_pin, NMK_GPIO_ALT_GPIO); | 
 | 47 | 	nmk_gpio_set_mode(nhk8815_i2c_data0.sda_pin, NMK_GPIO_ALT_GPIO); | 
 | 48 | 	platform_device_register(&nhk8815_i2c_dev0); | 
 | 49 |  | 
 | 50 | 	nmk_gpio_set_mode(nhk8815_i2c_data1.scl_pin, NMK_GPIO_ALT_GPIO); | 
 | 51 | 	nmk_gpio_set_mode(nhk8815_i2c_data1.sda_pin, NMK_GPIO_ALT_GPIO); | 
 | 52 | 	platform_device_register(&nhk8815_i2c_dev1); | 
 | 53 |  | 
 | 54 | 	return 0; | 
 | 55 | } | 
 | 56 |  | 
 | 57 | static void __exit nhk8815_i2c_exit(void) | 
 | 58 | { | 
 | 59 | 	platform_device_unregister(&nhk8815_i2c_dev0); | 
 | 60 | 	platform_device_unregister(&nhk8815_i2c_dev1); | 
 | 61 | 	return; | 
 | 62 | } | 
 | 63 |  | 
 | 64 | module_init(nhk8815_i2c_init); | 
 | 65 | module_exit(nhk8815_i2c_exit); |