Commit 74b9272b authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'devicetree-for-linus' of git://git.secretlab.ca/git/linux

Pull device tree updates from Grant Likely:
 "This branch contains the following changes:
   - Removal of CONFIG_OF_DEVICE, it is always enabled by CONFIG_OF
   - Remove #ifdef from linux/of_platform.h to increase compiler syntax
     coverage
   - Bug fix for address decoding on Bimini and js2x powerpc platforms.
   - miscellaneous binding changes

  One note on the above.  The binding changes going in from all kinds of
  different trees has gotten rather out of hand.  I picked up some
  during this cycle, but even going though my tree isn't a great fit.

  Ian Campbell has prototyped splitting the bindings and .dtb files into
  a separate repository.  The plan is to migrate to using that sometime
  in the next few kernel releases which should get rid of a lot of the
  churn on binding docs and .dts files"

* tag 'devicetree-for-linus' of git://git.secretlab.ca/git/linux:
  of: Fix address decoding on Bimini and js2x machines
  of: remove CONFIG_OF_DEVICE
  usb: chipidea: depend on CONFIG_OF instead of CONFIG_OF_DEVICE
  of: remove of_platform_driver
  ibmebus: convert of_platform_driver to platform_driver
  driver core: move to_platform_driver to platform_device.h
  mfd: DT bindings for the palmas family MFD
  ARM: dts: omap3-devkit8000: fix NAND memory binding
  of/base: fix typos
  of: remove #ifdef from linux/of_platform.h
parents f5b63ac0 6dd18e46
* palmas device tree bindings
The TI palmas family current members :-
twl6035 (palmas)
twl6037 (palmas)
tps65913 (palmas)
tps65914 (palmas)
Required properties:
- compatible : Should be from the list
ti,twl6035
ti,twl6036
ti,twl6037
ti,tps65913
ti,tps65914
ti,tps80036
and also the generic series names
ti,palmas
- interrupt-controller : palmas has its own internal IRQs
- #interrupt-cells : should be set to 2 for IRQ number and flags
The first cell is the IRQ number.
The second cell is the flags, encoded as the trigger masks from
Documentation/devicetree/bindings/interrupts.txt
- interrupt-parent : The parent interrupt controller.
Optional properties:
ti,mux-padX : set the pad register X (1-2) to the correct muxing for the
hardware, if not set will use muxing in OTP.
Example:
palmas {
compatible = "ti,twl6035", "ti,palmas";
reg = <0x48>
interrupt-parent = <&intc>;
interrupt-controller;
#interrupt-cells = <2>;
ti,mux-pad1 = <0>;
ti,mux-pad2 = <0>;
#address-cells = <1>;
#size-cells = <0>;
pmic {
compatible = "ti,twl6035-pmic", "ti,palmas-pmic";
....
};
}
* palmas regulator IP block devicetree bindings
Required properties:
- compatible : Should be from the list
ti,twl6035-pmic
ti,twl6036-pmic
ti,twl6037-pmic
ti,tps65913-pmic
ti,tps65914-pmic
and also the generic series names
ti,palmas-pmic
- interrupt-parent : The parent interrupt controller which is palmas.
- interrupts : The interrupt number and the type which can be looked up here:
arch/arm/boot/dts/include/dt-bindings/interrupt-controller/irq.h
- interrupts-name: The names of the individual interrupts.
Optional properties:
- ti,ldo6-vibrator : ldo6 is in vibrator mode
Optional nodes:
- regulators : Must contain a sub-node per regulator from the list below.
Each sub-node should contain the constraints and initialization
information for that regulator. See regulator.txt for a
description of standard properties for these sub-nodes.
Additional custom properties are listed below.
For ti,palmas-pmic - smps12, smps123, smps3 depending on OTP,
smps45, smps457, smps7 depending on variant, smps6, smps[8-10],
ldo[1-9], ldoln, ldousb.
Optional sub-node properties:
ti,warm-reset - maintain voltage during warm reset(boolean)
ti,roof-floor - control voltage selection by pin(boolean)
ti,sleep-mode - mode to adopt in pmic sleep 0 - off, 1 - auto,
2 - eco, 3 - forced pwm
ti,tstep - slope control 0 - Jump, 1 10mV/us, 2 5mV/us, 3 2.5mV/us
ti,smps-range - OTP has the wrong range set for the hardware so override
0 - low range, 1 - high range.
Example:
#include <dt-bindings/interrupt-controller/irq.h>
pmic {
compatible = "ti,twl6035-pmic", "ti,palmas-pmic";
interrupt-parent = <&palmas>;
interrupts = <14 IRQ_TYPE_NONE>;
interrupts-name = "short-irq";
ti,ldo6-vibrator;
regulators {
smps12_reg : smps12 {
regulator-name = "smps12";
regulator-min-microvolt = < 600000>;
regulator-max-microvolt = <1500000>;
regulator-always-on;
regulator-boot-on;
ti,warm-reset;
ti,roof-floor;
ti,mode-sleep = <0>;
ti,tstep = <0>;
ti,smps-range = <1>;
};
ldo1_reg: ldo1 {
regulator-name = "ldo1";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
};
};
};
...@@ -124,20 +124,21 @@ nand@0,0 { ...@@ -124,20 +124,21 @@ nand@0,0 {
reg = <0 0 0>; /* CS0, offset 0 */ reg = <0 0 0>; /* CS0, offset 0 */
nand-bus-width = <16>; nand-bus-width = <16>;
gpmc,sync-clk = <0>; gpmc,device-nand;
gpmc,cs-on = <0>; gpmc,sync-clki-ps = <0>;
gpmc,cs-rd-off = <44>; gpmc,cs-on-ns = <0>;
gpmc,cs-wr-off = <44>; gpmc,cs-rd-off-ns = <44>;
gpmc,adv-on = <6>; gpmc,cs-wr-off-ns = <44>;
gpmc,adv-rd-off = <34>; gpmc,adv-on-ns = <6>;
gpmc,adv-wr-off = <44>; gpmc,adv-rd-off-ns = <34>;
gpmc,we-off = <40>; gpmc,adv-wr-off-ns = <44>;
gpmc,oe-off = <54>; gpmc,we-off-ns = <40>;
gpmc,access = <64>; gpmc,oe-off-ns = <54>;
gpmc,rd-cycle = <82>; gpmc,access-ns = <64>;
gpmc,wr-cycle = <82>; gpmc,rd-cycle-ns = <82>;
gpmc,wr-access = <40>; gpmc,wr-cycle-ns = <82>;
gpmc,wr-data-mux-bus = <0>; gpmc,wr-access-ns = <40>;
gpmc,wr-data-mux-bus-ns = <0>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
......
...@@ -48,8 +48,8 @@ ...@@ -48,8 +48,8 @@
extern struct bus_type ibmebus_bus_type; extern struct bus_type ibmebus_bus_type;
int ibmebus_register_driver(struct of_platform_driver *drv); int ibmebus_register_driver(struct platform_driver *drv);
void ibmebus_unregister_driver(struct of_platform_driver *drv); void ibmebus_unregister_driver(struct platform_driver *drv);
int ibmebus_request_irq(u32 ist, irq_handler_t handler, int ibmebus_request_irq(u32 ist, irq_handler_t handler,
unsigned long irq_flags, const char *devname, unsigned long irq_flags, const char *devname,
......
...@@ -205,7 +205,7 @@ static int ibmebus_create_devices(const struct of_device_id *matches) ...@@ -205,7 +205,7 @@ static int ibmebus_create_devices(const struct of_device_id *matches)
return ret; return ret;
} }
int ibmebus_register_driver(struct of_platform_driver *drv) int ibmebus_register_driver(struct platform_driver *drv)
{ {
/* If the driver uses devices that ibmebus doesn't know, add them */ /* If the driver uses devices that ibmebus doesn't know, add them */
ibmebus_create_devices(drv->driver.of_match_table); ibmebus_create_devices(drv->driver.of_match_table);
...@@ -215,7 +215,7 @@ int ibmebus_register_driver(struct of_platform_driver *drv) ...@@ -215,7 +215,7 @@ int ibmebus_register_driver(struct of_platform_driver *drv)
} }
EXPORT_SYMBOL(ibmebus_register_driver); EXPORT_SYMBOL(ibmebus_register_driver);
void ibmebus_unregister_driver(struct of_platform_driver *drv) void ibmebus_unregister_driver(struct platform_driver *drv)
{ {
driver_unregister(&drv->driver); driver_unregister(&drv->driver);
} }
...@@ -338,11 +338,10 @@ static int ibmebus_bus_bus_match(struct device *dev, struct device_driver *drv) ...@@ -338,11 +338,10 @@ static int ibmebus_bus_bus_match(struct device *dev, struct device_driver *drv)
static int ibmebus_bus_device_probe(struct device *dev) static int ibmebus_bus_device_probe(struct device *dev)
{ {
int error = -ENODEV; int error = -ENODEV;
struct of_platform_driver *drv; struct platform_driver *drv;
struct platform_device *of_dev; struct platform_device *of_dev;
const struct of_device_id *match;
drv = to_of_platform_driver(dev->driver); drv = to_platform_driver(dev->driver);
of_dev = to_platform_device(dev); of_dev = to_platform_device(dev);
if (!drv->probe) if (!drv->probe)
...@@ -350,9 +349,8 @@ static int ibmebus_bus_device_probe(struct device *dev) ...@@ -350,9 +349,8 @@ static int ibmebus_bus_device_probe(struct device *dev)
of_dev_get(of_dev); of_dev_get(of_dev);
match = of_match_device(drv->driver.of_match_table, dev); if (of_driver_match_device(dev, dev->driver))
if (match) error = drv->probe(of_dev);
error = drv->probe(of_dev, match);
if (error) if (error)
of_dev_put(of_dev); of_dev_put(of_dev);
...@@ -362,7 +360,7 @@ static int ibmebus_bus_device_probe(struct device *dev) ...@@ -362,7 +360,7 @@ static int ibmebus_bus_device_probe(struct device *dev)
static int ibmebus_bus_device_remove(struct device *dev) static int ibmebus_bus_device_remove(struct device *dev)
{ {
struct platform_device *of_dev = to_platform_device(dev); struct platform_device *of_dev = to_platform_device(dev);
struct of_platform_driver *drv = to_of_platform_driver(dev->driver); struct platform_driver *drv = to_platform_driver(dev->driver);
if (dev->driver && drv->remove) if (dev->driver && drv->remove)
drv->remove(of_dev); drv->remove(of_dev);
...@@ -372,7 +370,7 @@ static int ibmebus_bus_device_remove(struct device *dev) ...@@ -372,7 +370,7 @@ static int ibmebus_bus_device_remove(struct device *dev)
static void ibmebus_bus_device_shutdown(struct device *dev) static void ibmebus_bus_device_shutdown(struct device *dev)
{ {
struct platform_device *of_dev = to_platform_device(dev); struct platform_device *of_dev = to_platform_device(dev);
struct of_platform_driver *drv = to_of_platform_driver(dev->driver); struct platform_driver *drv = to_platform_driver(dev->driver);
if (dev->driver && drv->shutdown) if (dev->driver && drv->shutdown)
drv->shutdown(of_dev); drv->shutdown(of_dev);
...@@ -419,7 +417,7 @@ struct device_attribute ibmebus_bus_device_attrs[] = { ...@@ -419,7 +417,7 @@ struct device_attribute ibmebus_bus_device_attrs[] = {
static int ibmebus_bus_legacy_suspend(struct device *dev, pm_message_t mesg) static int ibmebus_bus_legacy_suspend(struct device *dev, pm_message_t mesg)
{ {
struct platform_device *of_dev = to_platform_device(dev); struct platform_device *of_dev = to_platform_device(dev);
struct of_platform_driver *drv = to_of_platform_driver(dev->driver); struct platform_driver *drv = to_platform_driver(dev->driver);
int ret = 0; int ret = 0;
if (dev->driver && drv->suspend) if (dev->driver && drv->suspend)
...@@ -430,7 +428,7 @@ static int ibmebus_bus_legacy_suspend(struct device *dev, pm_message_t mesg) ...@@ -430,7 +428,7 @@ static int ibmebus_bus_legacy_suspend(struct device *dev, pm_message_t mesg)
static int ibmebus_bus_legacy_resume(struct device *dev) static int ibmebus_bus_legacy_resume(struct device *dev)
{ {
struct platform_device *of_dev = to_platform_device(dev); struct platform_device *of_dev = to_platform_device(dev);
struct of_platform_driver *drv = to_of_platform_driver(dev->driver); struct platform_driver *drv = to_platform_driver(dev->driver);
int ret = 0; int ret = 0;
if (dev->driver && drv->resume) if (dev->driver && drv->resume)
......
...@@ -29,9 +29,6 @@ ...@@ -29,9 +29,6 @@
/* For automatically allocated device IDs */ /* For automatically allocated device IDs */
static DEFINE_IDA(platform_devid_ida); static DEFINE_IDA(platform_devid_ida);
#define to_platform_driver(drv) (container_of((drv), struct platform_driver, \
driver))
struct device platform_bus = { struct device platform_bus = {
.init_name = "platform", .init_name = "platform",
}; };
......
...@@ -713,8 +713,7 @@ static struct attribute_group ehca_dev_attr_grp = { ...@@ -713,8 +713,7 @@ static struct attribute_group ehca_dev_attr_grp = {
.attrs = ehca_dev_attrs .attrs = ehca_dev_attrs
}; };
static int ehca_probe(struct platform_device *dev, static int ehca_probe(struct platform_device *dev)
const struct of_device_id *id)
{ {
struct ehca_shca *shca; struct ehca_shca *shca;
const u64 *handle; const u64 *handle;
...@@ -937,7 +936,7 @@ static struct of_device_id ehca_device_table[] = ...@@ -937,7 +936,7 @@ static struct of_device_id ehca_device_table[] =
}; };
MODULE_DEVICE_TABLE(of, ehca_device_table); MODULE_DEVICE_TABLE(of, ehca_device_table);
static struct of_platform_driver ehca_driver = { static struct platform_driver ehca_driver = {
.probe = ehca_probe, .probe = ehca_probe,
.remove = ehca_remove, .remove = ehca_remove,
.driver = { .driver = {
......
...@@ -98,8 +98,7 @@ static struct ehea_fw_handle_array ehea_fw_handles; ...@@ -98,8 +98,7 @@ static struct ehea_fw_handle_array ehea_fw_handles;
static struct ehea_bcmc_reg_array ehea_bcmc_regs; static struct ehea_bcmc_reg_array ehea_bcmc_regs;
static int ehea_probe_adapter(struct platform_device *dev, static int ehea_probe_adapter(struct platform_device *dev);
const struct of_device_id *id);
static int ehea_remove(struct platform_device *dev); static int ehea_remove(struct platform_device *dev);
...@@ -112,7 +111,7 @@ static struct of_device_id ehea_device_table[] = { ...@@ -112,7 +111,7 @@ static struct of_device_id ehea_device_table[] = {
}; };
MODULE_DEVICE_TABLE(of, ehea_device_table); MODULE_DEVICE_TABLE(of, ehea_device_table);
static struct of_platform_driver ehea_driver = { static struct platform_driver ehea_driver = {
.driver = { .driver = {
.name = "ehea", .name = "ehea",
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -3251,8 +3250,7 @@ static void ehea_remove_device_sysfs(struct platform_device *dev) ...@@ -3251,8 +3250,7 @@ static void ehea_remove_device_sysfs(struct platform_device *dev)
device_remove_file(&dev->dev, &dev_attr_remove_port); device_remove_file(&dev->dev, &dev_attr_remove_port);
} }
static int ehea_probe_adapter(struct platform_device *dev, static int ehea_probe_adapter(struct platform_device *dev)
const struct of_device_id *id)
{ {
struct ehea_adapter *adapter; struct ehea_adapter *adapter;
const u64 *adapter_handle; const u64 *adapter_handle;
......
...@@ -48,9 +48,6 @@ config OF_IRQ ...@@ -48,9 +48,6 @@ config OF_IRQ
def_bool y def_bool y
depends on !SPARC depends on !SPARC
config OF_DEVICE
def_bool y
config OF_I2C config OF_I2C
def_tristate I2C def_tristate I2C
depends on I2C depends on I2C
......
obj-y = base.o obj-y = base.o device.o platform.o
obj-$(CONFIG_OF_FLATTREE) += fdt.o obj-$(CONFIG_OF_FLATTREE) += fdt.o
obj-$(CONFIG_OF_PROMTREE) += pdt.o obj-$(CONFIG_OF_PROMTREE) += pdt.o
obj-$(CONFIG_OF_ADDRESS) += address.o obj-$(CONFIG_OF_ADDRESS) += address.o
obj-$(CONFIG_OF_IRQ) += irq.o obj-$(CONFIG_OF_IRQ) += irq.o
obj-$(CONFIG_OF_DEVICE) += device.o platform.o
obj-$(CONFIG_OF_I2C) += of_i2c.o obj-$(CONFIG_OF_I2C) += of_i2c.o
obj-$(CONFIG_OF_NET) += of_net.o obj-$(CONFIG_OF_NET) += of_net.o
obj-$(CONFIG_OF_SELFTEST) += selftest.o obj-$(CONFIG_OF_SELFTEST) += selftest.o
......
...@@ -106,8 +106,12 @@ static unsigned int of_bus_default_get_flags(const __be32 *addr) ...@@ -106,8 +106,12 @@ static unsigned int of_bus_default_get_flags(const __be32 *addr)
static int of_bus_pci_match(struct device_node *np) static int of_bus_pci_match(struct device_node *np)
{ {
/* "vci" is for the /chaos bridge on 1st-gen PCI powermacs */ /*
return !strcmp(np->type, "pci") || !strcmp(np->type, "vci"); * "vci" is for the /chaos bridge on 1st-gen PCI powermacs
* "ht" is hypertransport
*/
return !strcmp(np->type, "pci") || !strcmp(np->type, "vci") ||
!strcmp(np->type, "ht");
} }
static void of_bus_pci_count_cells(struct device_node *np, static void of_bus_pci_count_cells(struct device_node *np,
......
...@@ -812,7 +812,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u32_index); ...@@ -812,7 +812,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u32_index);
* *
* @np: device node from which the property value is to be read. * @np: device node from which the property value is to be read.
* @propname: name of the property to be searched. * @propname: name of the property to be searched.
* @out_value: pointer to return value, modified only if return value is 0. * @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read * @sz: number of array elements to read
* *
* Search for a property in a device node and read 8-bit value(s) from * Search for a property in a device node and read 8-bit value(s) from
...@@ -823,7 +823,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u32_index); ...@@ -823,7 +823,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u32_index);
* dts entry of array should be like: * dts entry of array should be like:
* property = /bits/ 8 <0x50 0x60 0x70>; * property = /bits/ 8 <0x50 0x60 0x70>;
* *
* The out_value is modified only if a valid u8 value can be decoded. * The out_values is modified only if a valid u8 value can be decoded.
*/ */
int of_property_read_u8_array(const struct device_node *np, int of_property_read_u8_array(const struct device_node *np,
const char *propname, u8 *out_values, size_t sz) const char *propname, u8 *out_values, size_t sz)
...@@ -845,7 +845,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u8_array); ...@@ -845,7 +845,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u8_array);
* *
* @np: device node from which the property value is to be read. * @np: device node from which the property value is to be read.
* @propname: name of the property to be searched. * @propname: name of the property to be searched.
* @out_value: pointer to return value, modified only if return value is 0. * @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read * @sz: number of array elements to read
* *
* Search for a property in a device node and read 16-bit value(s) from * Search for a property in a device node and read 16-bit value(s) from
...@@ -856,7 +856,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u8_array); ...@@ -856,7 +856,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u8_array);
* dts entry of array should be like: * dts entry of array should be like:
* property = /bits/ 16 <0x5000 0x6000 0x7000>; * property = /bits/ 16 <0x5000 0x6000 0x7000>;
* *
* The out_value is modified only if a valid u16 value can be decoded. * The out_values is modified only if a valid u16 value can be decoded.
*/ */
int of_property_read_u16_array(const struct device_node *np, int of_property_read_u16_array(const struct device_node *np,
const char *propname, u16 *out_values, size_t sz) const char *propname, u16 *out_values, size_t sz)
...@@ -879,7 +879,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u16_array); ...@@ -879,7 +879,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u16_array);
* *
* @np: device node from which the property value is to be read. * @np: device node from which the property value is to be read.
* @propname: name of the property to be searched. * @propname: name of the property to be searched.
* @out_value: pointer to return value, modified only if return value is 0. * @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read * @sz: number of array elements to read
* *
* Search for a property in a device node and read 32-bit value(s) from * Search for a property in a device node and read 32-bit value(s) from
...@@ -887,7 +887,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u16_array); ...@@ -887,7 +887,7 @@ EXPORT_SYMBOL_GPL(of_property_read_u16_array);
* -ENODATA if property does not have a value, and -EOVERFLOW if the * -ENODATA if property does not have a value, and -EOVERFLOW if the
* property data isn't large enough. * property data isn't large enough.
* *
* The out_value is modified only if a valid u32 value can be decoded. * The out_values is modified only if a valid u32 value can be decoded.
*/ */
int of_property_read_u32_array(const struct device_node *np, int of_property_read_u32_array(const struct device_node *np,
const char *propname, u32 *out_values, const char *propname, u32 *out_values,
......
...@@ -16,6 +16,6 @@ ifneq ($(CONFIG_PCI),) ...@@ -16,6 +16,6 @@ ifneq ($(CONFIG_PCI),)
obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_pci.o obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_pci.o
endif endif
ifneq ($(CONFIG_OF_DEVICE),) ifneq ($(CONFIG_OF),)
obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_imx.o usbmisc_imx.o obj-$(CONFIG_USB_CHIPIDEA) += ci_hdrc_imx.o usbmisc_imx.o
endif endif
...@@ -4,12 +4,12 @@ ...@@ -4,12 +4,12 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/of_platform.h> /* temporary until merge */ #include <linux/of_platform.h> /* temporary until merge */
#ifdef CONFIG_OF_DEVICE
#include <linux/of.h> #include <linux/of.h>
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
struct device; struct device;
#ifdef CONFIG_OF
extern const struct of_device_id *of_match_device( extern const struct of_device_id *of_match_device(
const struct of_device_id *matches, const struct device *dev); const struct of_device_id *matches, const struct device *dev);
extern void of_device_make_bus_id(struct device *dev); extern void of_device_make_bus_id(struct device *dev);
...@@ -43,7 +43,7 @@ static inline void of_device_node_put(struct device *dev) ...@@ -43,7 +43,7 @@ static inline void of_device_node_put(struct device *dev)
of_node_put(dev->of_node); of_node_put(dev->of_node);
} }
#else /* CONFIG_OF_DEVICE */ #else /* CONFIG_OF */
static inline int of_driver_match_device(struct device *dev, static inline int of_driver_match_device(struct device *dev,
struct device_driver *drv) struct device_driver *drv)
...@@ -67,6 +67,6 @@ static inline const struct of_device_id *of_match_device( ...@@ -67,6 +67,6 @@ static inline const struct of_device_id *of_match_device(
{ {
return NULL; return NULL;
} }
#endif /* CONFIG_OF_DEVICE */ #endif /* CONFIG_OF */
#endif /* _LINUX_OF_DEVICE_H */ #endif /* _LINUX_OF_DEVICE_H */
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
#include <linux/device.h> #include <linux/device.h>
#include <linux/mod_devicetable.h> #include <linux/mod_devicetable.h>
#ifdef CONFIG_OF_DEVICE
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -53,27 +51,6 @@ struct of_dev_auxdata { ...@@ -53,27 +51,6 @@ struct of_dev_auxdata {
{ .compatible = _compat, .phys_addr = _phys, .name = _name, \ { .compatible = _compat, .phys_addr = _phys, .name = _name, \
.platform_data = _pdata } .platform_data = _pdata }
/**
* of_platform_driver - Legacy of-aware driver for platform devices.
*
* An of_platform_driver driver is attached to a basic platform_device on
* the ibm ebus (ibmebus_bus_type).
*/
struct of_platform_driver
{
int (*probe)(struct platform_device* dev,
const struct of_device_id *match);
int (*remove)(struct platform_device* dev);
int (*suspend)(struct platform_device* dev, pm_message_t state);
int (*resume)(struct platform_device* dev);
int (*shutdown)(struct platform_device* dev);
struct device_driver driver;
};
#define to_of_platform_driver(drv) \
container_of(drv,struct of_platform_driver, driver)
extern const struct of_device_id of_default_bus_match_table[]; extern const struct of_device_id of_default_bus_match_table[];
/* Platform drivers register/unregister */ /* Platform drivers register/unregister */
...@@ -82,7 +59,6 @@ extern struct platform_device *of_device_alloc(struct device_node *np, ...@@ -82,7 +59,6 @@ extern struct platform_device *of_device_alloc(struct device_node *np,
struct device *parent); struct device *parent);
extern struct platform_device *of_find_device_by_node(struct device_node *np); extern struct platform_device *of_find_device_by_node(struct device_node *np);
#ifdef CONFIG_OF_ADDRESS /* device reg helpers depend on OF_ADDRESS */
/* Platform devices and busses creation */ /* Platform devices and busses creation */
extern struct platform_device *of_platform_device_create(struct device_node *np, extern struct platform_device *of_platform_device_create(struct device_node *np,
const char *bus_id, const char *bus_id,
...@@ -91,17 +67,12 @@ extern struct platform_device *of_platform_device_create(struct device_node *np, ...@@ -91,17 +67,12 @@ extern struct platform_device *of_platform_device_create(struct device_node *np,
extern int of_platform_bus_probe(struct device_node *root, extern int of_platform_bus_probe(struct device_node *root,
const struct of_device_id *matches, const struct of_device_id *matches,
struct device *parent); struct device *parent);
#ifdef CONFIG_OF_ADDRESS
extern int of_platform_populate(struct device_node *root, extern int of_platform_populate(struct device_node *root,
const struct of_device_id *matches, const struct of_device_id *matches,
const struct of_dev_auxdata *lookup, const struct of_dev_auxdata *lookup,
struct device *parent); struct device *parent);
#endif /* CONFIG_OF_ADDRESS */ #else
#endif /* CONFIG_OF_DEVICE */
#if !defined(CONFIG_OF_ADDRESS)
struct of_dev_auxdata;
struct device_node;
static inline int of_platform_populate(struct device_node *root, static inline int of_platform_populate(struct device_node *root,
const struct of_device_id *matches, const struct of_device_id *matches,
const struct of_dev_auxdata *lookup, const struct of_dev_auxdata *lookup,
...@@ -109,6 +80,6 @@ static inline int of_platform_populate(struct device_node *root, ...@@ -109,6 +80,6 @@ static inline int of_platform_populate(struct device_node *root,
{ {
return -ENODEV; return -ENODEV;
} }
#endif /* !CONFIG_OF_ADDRESS */ #endif
#endif /* _LINUX_OF_PLATFORM_H */ #endif /* _LINUX_OF_PLATFORM_H */
...@@ -180,6 +180,9 @@ struct platform_driver { ...@@ -180,6 +180,9 @@ struct platform_driver {
const struct platform_device_id *id_table; const struct platform_device_id *id_table;
}; };
#define to_platform_driver(drv) (container_of((drv), struct platform_driver, \
driver))
/* /*
* use a macro to avoid include chaining to get THIS_MODULE * use a macro to avoid include chaining to get THIS_MODULE
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment