diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-05 12:31:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-05 12:31:03 -0400 |
commit | 00341b5301009ba6f36ee3298e69b649ac5540ff (patch) | |
tree | 0f0cdcabd20b2834f30b67b50795c49989ced65a /drivers/of | |
parent | 45d9a2220f6004b47c362cc7fc7cf9a73cb6353a (diff) | |
parent | b720423a2627f045133bec39a31fe2bc0dab86f3 (diff) |
Merge branch 'i2c/for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang:
"Highlights:
- OF and ACPI helpers are now included in the core, and not in
external files anymore. This removes dependency problems for
modules and is cleaner, in general.
- mv64xxx-driver gains fifo usage to support mv78230
- imx-driver overhaul to support VF610
- various cleanups, most notably related to devm_* and CONFIG_PM
usage
- driver bugfixes and smaller feature additions"
* 'i2c/for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (51 commits)
i2c: rcar: add rcar-H2 support
i2c: sirf: retry 3 times as sometimes we get random noack and timeout
i2c: sirf: support reverse direction of address
i2c: sirf: fix the typo for setting bitrate to less than 100k
i2c: sirf: we need to wait I2C_RESET status in resume
i2c: sirf: reset i2c controller early after we get a noack
i2c: designware: get SDA hold time, HCNT and LCNT configuration from ACPI
i2c: designware: make HCNT/LCNT values configurable
i2c: mpc: cleanup clock API use
i2c: pnx: fix error return code in i2c_pnx_probe()
i2c: ismt: add error return code in probe()
i2c: mv64xxx: fix typo in binding documentation
i2c: imx: use exact SoC revision to document binding
i2c: move ACPI helpers into the core
i2c: move OF helpers into the core
i2c: mv64xxx: Fix timing issue on Armada XP (errata FE-8471889)
i2c: mv64xxx: Add I2C Transaction Generator support
i2c: powermac: fix return path on error
Documentation: i2c: Fix example in instantiating-devices
i2c: tiny-usb: do not use stack as URB transfer_buffer
...
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/Kconfig | 6 | ||||
-rw-r--r-- | drivers/of/Makefile | 1 | ||||
-rw-r--r-- | drivers/of/of_i2c.c | 114 |
3 files changed, 0 insertions, 121 deletions
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index 80e5c13b930d..78cc76053328 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig | |||
@@ -48,12 +48,6 @@ config OF_IRQ | |||
48 | def_bool y | 48 | def_bool y |
49 | depends on !SPARC | 49 | depends on !SPARC |
50 | 50 | ||
51 | config OF_I2C | ||
52 | def_tristate I2C | ||
53 | depends on I2C | ||
54 | help | ||
55 | OpenFirmware I2C accessors | ||
56 | |||
57 | config OF_NET | 51 | config OF_NET |
58 | depends on NETDEVICES | 52 | depends on NETDEVICES |
59 | def_bool y | 53 | def_bool y |
diff --git a/drivers/of/Makefile b/drivers/of/Makefile index 1f9c0c492ef9..efd05102c405 100644 --- a/drivers/of/Makefile +++ b/drivers/of/Makefile | |||
@@ -3,7 +3,6 @@ obj-$(CONFIG_OF_FLATTREE) += fdt.o | |||
3 | obj-$(CONFIG_OF_PROMTREE) += pdt.o | 3 | obj-$(CONFIG_OF_PROMTREE) += pdt.o |
4 | obj-$(CONFIG_OF_ADDRESS) += address.o | 4 | obj-$(CONFIG_OF_ADDRESS) += address.o |
5 | obj-$(CONFIG_OF_IRQ) += irq.o | 5 | obj-$(CONFIG_OF_IRQ) += irq.o |
6 | obj-$(CONFIG_OF_I2C) += of_i2c.o | ||
7 | obj-$(CONFIG_OF_NET) += of_net.o | 6 | obj-$(CONFIG_OF_NET) += of_net.o |
8 | obj-$(CONFIG_OF_SELFTEST) += selftest.o | 7 | obj-$(CONFIG_OF_SELFTEST) += selftest.o |
9 | obj-$(CONFIG_OF_MDIO) += of_mdio.o | 8 | obj-$(CONFIG_OF_MDIO) += of_mdio.o |
diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c deleted file mode 100644 index b667264222cc..000000000000 --- a/drivers/of/of_i2c.c +++ /dev/null | |||
@@ -1,114 +0,0 @@ | |||
1 | /* | ||
2 | * OF helpers for the I2C API | ||
3 | * | ||
4 | * Copyright (c) 2008 Jochen Friedrich <jochen@scram.de> | ||
5 | * | ||
6 | * Based on a previous patch from Jon Smirl <jonsmirl@gmail.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | */ | ||
13 | |||
14 | #include <linux/i2c.h> | ||
15 | #include <linux/irq.h> | ||
16 | #include <linux/of.h> | ||
17 | #include <linux/of_i2c.h> | ||
18 | #include <linux/of_irq.h> | ||
19 | #include <linux/module.h> | ||
20 | |||
21 | void of_i2c_register_devices(struct i2c_adapter *adap) | ||
22 | { | ||
23 | void *result; | ||
24 | struct device_node *node; | ||
25 | |||
26 | /* Only register child devices if the adapter has a node pointer set */ | ||
27 | if (!adap->dev.of_node) | ||
28 | return; | ||
29 | |||
30 | dev_dbg(&adap->dev, "of_i2c: walking child nodes\n"); | ||
31 | |||
32 | for_each_available_child_of_node(adap->dev.of_node, node) { | ||
33 | struct i2c_board_info info = {}; | ||
34 | struct dev_archdata dev_ad = {}; | ||
35 | const __be32 *addr; | ||
36 | int len; | ||
37 | |||
38 | dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name); | ||
39 | |||
40 | if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) { | ||
41 | dev_err(&adap->dev, "of_i2c: modalias failure on %s\n", | ||
42 | node->full_name); | ||
43 | continue; | ||
44 | } | ||
45 | |||
46 | addr = of_get_property(node, "reg", &len); | ||
47 | if (!addr || (len < sizeof(int))) { | ||
48 | dev_err(&adap->dev, "of_i2c: invalid reg on %s\n", | ||
49 | node->full_name); | ||
50 | continue; | ||
51 | } | ||
52 | |||
53 | info.addr = be32_to_cpup(addr); | ||
54 | if (info.addr > (1 << 10) - 1) { | ||
55 | dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n", | ||
56 | info.addr, node->full_name); | ||
57 | continue; | ||
58 | } | ||
59 | |||
60 | info.irq = irq_of_parse_and_map(node, 0); | ||
61 | info.of_node = of_node_get(node); | ||
62 | info.archdata = &dev_ad; | ||
63 | |||
64 | if (of_get_property(node, "wakeup-source", NULL)) | ||
65 | info.flags |= I2C_CLIENT_WAKE; | ||
66 | |||
67 | request_module("%s%s", I2C_MODULE_PREFIX, info.type); | ||
68 | |||
69 | result = i2c_new_device(adap, &info); | ||
70 | if (result == NULL) { | ||
71 | dev_err(&adap->dev, "of_i2c: Failure registering %s\n", | ||
72 | node->full_name); | ||
73 | of_node_put(node); | ||
74 | irq_dispose_mapping(info.irq); | ||
75 | continue; | ||
76 | } | ||
77 | } | ||
78 | } | ||
79 | EXPORT_SYMBOL(of_i2c_register_devices); | ||
80 | |||
81 | static int of_dev_node_match(struct device *dev, void *data) | ||
82 | { | ||
83 | return dev->of_node == data; | ||
84 | } | ||
85 | |||
86 | /* must call put_device() when done with returned i2c_client device */ | ||
87 | struct i2c_client *of_find_i2c_device_by_node(struct device_node *node) | ||
88 | { | ||
89 | struct device *dev; | ||
90 | |||
91 | dev = bus_find_device(&i2c_bus_type, NULL, node, | ||
92 | of_dev_node_match); | ||
93 | if (!dev) | ||
94 | return NULL; | ||
95 | |||
96 | return i2c_verify_client(dev); | ||
97 | } | ||
98 | EXPORT_SYMBOL(of_find_i2c_device_by_node); | ||
99 | |||
100 | /* must call put_device() when done with returned i2c_adapter device */ | ||
101 | struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node) | ||
102 | { | ||
103 | struct device *dev; | ||
104 | |||
105 | dev = bus_find_device(&i2c_bus_type, NULL, node, | ||
106 | of_dev_node_match); | ||
107 | if (!dev) | ||
108 | return NULL; | ||
109 | |||
110 | return i2c_verify_adapter(dev); | ||
111 | } | ||
112 | EXPORT_SYMBOL(of_find_i2c_adapter_by_node); | ||
113 | |||
114 | MODULE_LICENSE("GPL"); | ||