aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/acpi.h48
-rw-r--r--include/linux/device.h18
-rw-r--r--include/linux/i2c.h9
-rw-r--r--include/linux/platform_device.h1
4 files changed, 76 insertions, 0 deletions
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 28ba643c92c1..3574e4a2bf14 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -27,6 +27,7 @@
27 27
28#include <linux/errno.h> 28#include <linux/errno.h>
29#include <linux/ioport.h> /* for struct resource */ 29#include <linux/ioport.h> /* for struct resource */
30#include <linux/device.h>
30 31
31#ifdef CONFIG_ACPI 32#ifdef CONFIG_ACPI
32 33
@@ -251,6 +252,26 @@ extern int pnpacpi_disabled;
251 252
252#define PXM_INVAL (-1) 253#define PXM_INVAL (-1)
253 254
255bool acpi_dev_resource_memory(struct acpi_resource *ares, struct resource *res);
256bool acpi_dev_resource_io(struct acpi_resource *ares, struct resource *res);
257bool acpi_dev_resource_address_space(struct acpi_resource *ares,
258 struct resource *res);
259bool acpi_dev_resource_ext_address_space(struct acpi_resource *ares,
260 struct resource *res);
261unsigned long acpi_dev_irq_flags(u8 triggering, u8 polarity, u8 shareable);
262bool acpi_dev_resource_interrupt(struct acpi_resource *ares, int index,
263 struct resource *res);
264
265struct resource_list_entry {
266 struct list_head node;
267 struct resource res;
268};
269
270void acpi_dev_free_resource_list(struct list_head *list);
271int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list,
272 int (*preproc)(struct acpi_resource *, void *),
273 void *preproc_data);
274
254int acpi_check_resource_conflict(const struct resource *res); 275int acpi_check_resource_conflict(const struct resource *res);
255 276
256int acpi_check_region(resource_size_t start, resource_size_t n, 277int acpi_check_region(resource_size_t start, resource_size_t n,
@@ -365,6 +386,17 @@ extern int acpi_nvs_register(__u64 start, __u64 size);
365extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *), 386extern int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
366 void *data); 387 void *data);
367 388
389const struct acpi_device_id *acpi_match_device(const struct acpi_device_id *ids,
390 const struct device *dev);
391
392static inline bool acpi_driver_match_device(struct device *dev,
393 const struct device_driver *drv)
394{
395 return !!acpi_match_device(drv->acpi_match_table, dev);
396}
397
398#define ACPI_PTR(_ptr) (_ptr)
399
368#else /* !CONFIG_ACPI */ 400#else /* !CONFIG_ACPI */
369 401
370#define acpi_disabled 1 402#define acpi_disabled 1
@@ -419,6 +451,22 @@ static inline int acpi_nvs_for_each_region(int (*func)(__u64, __u64, void *),
419 return 0; 451 return 0;
420} 452}
421 453
454struct acpi_device_id;
455
456static inline const struct acpi_device_id *acpi_match_device(
457 const struct acpi_device_id *ids, const struct device *dev)
458{
459 return NULL;
460}
461
462static inline bool acpi_driver_match_device(struct device *dev,
463 const struct device_driver *drv)
464{
465 return false;
466}
467
468#define ACPI_PTR(_ptr) (NULL)
469
422#endif /* !CONFIG_ACPI */ 470#endif /* !CONFIG_ACPI */
423 471
424#ifdef CONFIG_ACPI 472#ifdef CONFIG_ACPI
diff --git a/include/linux/device.h b/include/linux/device.h
index 86ef6ab553b1..05292e488346 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -190,6 +190,7 @@ extern struct klist *bus_get_device_klist(struct bus_type *bus);
190 * @mod_name: Used for built-in modules. 190 * @mod_name: Used for built-in modules.
191 * @suppress_bind_attrs: Disables bind/unbind via sysfs. 191 * @suppress_bind_attrs: Disables bind/unbind via sysfs.
192 * @of_match_table: The open firmware table. 192 * @of_match_table: The open firmware table.
193 * @acpi_match_table: The ACPI match table.
193 * @probe: Called to query the existence of a specific device, 194 * @probe: Called to query the existence of a specific device,
194 * whether this driver can work with it, and bind the driver 195 * whether this driver can work with it, and bind the driver
195 * to a specific device. 196 * to a specific device.
@@ -223,6 +224,7 @@ struct device_driver {
223 bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ 224 bool suppress_bind_attrs; /* disables bind/unbind via sysfs */
224 225
225 const struct of_device_id *of_match_table; 226 const struct of_device_id *of_match_table;
227 const struct acpi_device_id *acpi_match_table;
226 228
227 int (*probe) (struct device *dev); 229 int (*probe) (struct device *dev);
228 int (*remove) (struct device *dev); 230 int (*remove) (struct device *dev);
@@ -576,6 +578,12 @@ struct device_dma_parameters {
576 unsigned long segment_boundary_mask; 578 unsigned long segment_boundary_mask;
577}; 579};
578 580
581struct acpi_dev_node {
582#ifdef CONFIG_ACPI
583 void *handle;
584#endif
585};
586
579/** 587/**
580 * struct device - The basic device structure 588 * struct device - The basic device structure
581 * @parent: The device's "parent" device, the device to which it is attached. 589 * @parent: The device's "parent" device, the device to which it is attached.
@@ -616,6 +624,7 @@ struct device_dma_parameters {
616 * @dma_mem: Internal for coherent mem override. 624 * @dma_mem: Internal for coherent mem override.
617 * @archdata: For arch-specific additions. 625 * @archdata: For arch-specific additions.
618 * @of_node: Associated device tree node. 626 * @of_node: Associated device tree node.
627 * @acpi_node: Associated ACPI device node.
619 * @devt: For creating the sysfs "dev". 628 * @devt: For creating the sysfs "dev".
620 * @id: device instance 629 * @id: device instance
621 * @devres_lock: Spinlock to protect the resource of the device. 630 * @devres_lock: Spinlock to protect the resource of the device.
@@ -680,6 +689,7 @@ struct device {
680 struct dev_archdata archdata; 689 struct dev_archdata archdata;
681 690
682 struct device_node *of_node; /* associated device tree node */ 691 struct device_node *of_node; /* associated device tree node */
692 struct acpi_dev_node acpi_node; /* associated ACPI device node */
683 693
684 dev_t devt; /* dev_t, creates the sysfs "dev" */ 694 dev_t devt; /* dev_t, creates the sysfs "dev" */
685 u32 id; /* device instance */ 695 u32 id; /* device instance */
@@ -700,6 +710,14 @@ static inline struct device *kobj_to_dev(struct kobject *kobj)
700 return container_of(kobj, struct device, kobj); 710 return container_of(kobj, struct device, kobj);
701} 711}
702 712
713#ifdef CONFIG_ACPI
714#define ACPI_HANDLE(dev) ((dev)->acpi_node.handle)
715#define ACPI_HANDLE_SET(dev, _handle_) (dev)->acpi_node.handle = (_handle_)
716#else
717#define ACPI_HANDLE(dev) (NULL)
718#define ACPI_HANDLE_SET(dev, _handle_) do { } while (0)
719#endif
720
703/* Get the wakeup routines, which depend on struct device */ 721/* Get the wakeup routines, which depend on struct device */
704#include <linux/pm_wakeup.h> 722#include <linux/pm_wakeup.h>
705 723
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 800de224336b..d0c4db7b4872 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -259,6 +259,7 @@ static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
259 * @platform_data: stored in i2c_client.dev.platform_data 259 * @platform_data: stored in i2c_client.dev.platform_data
260 * @archdata: copied into i2c_client.dev.archdata 260 * @archdata: copied into i2c_client.dev.archdata
261 * @of_node: pointer to OpenFirmware device node 261 * @of_node: pointer to OpenFirmware device node
262 * @acpi_node: ACPI device node
262 * @irq: stored in i2c_client.irq 263 * @irq: stored in i2c_client.irq
263 * 264 *
264 * I2C doesn't actually support hardware probing, although controllers and 265 * I2C doesn't actually support hardware probing, although controllers and
@@ -279,6 +280,7 @@ struct i2c_board_info {
279 void *platform_data; 280 void *platform_data;
280 struct dev_archdata *archdata; 281 struct dev_archdata *archdata;
281 struct device_node *of_node; 282 struct device_node *of_node;
283 struct acpi_dev_node acpi_node;
282 int irq; 284 int irq;
283}; 285};
284 286
@@ -501,4 +503,11 @@ static inline int i2c_adapter_id(struct i2c_adapter *adap)
501 i2c_del_driver) 503 i2c_del_driver)
502 504
503#endif /* I2C */ 505#endif /* I2C */
506
507#if IS_ENABLED(CONFIG_ACPI_I2C)
508extern void acpi_i2c_register_devices(struct i2c_adapter *adap);
509#else
510static inline void acpi_i2c_register_devices(struct i2c_adapter *adap) {}
511#endif
512
504#endif /* _LINUX_I2C_H */ 513#endif /* _LINUX_I2C_H */
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 5711e9525a2a..a9ded9a3c175 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -55,6 +55,7 @@ extern int platform_add_devices(struct platform_device **, int);
55 55
56struct platform_device_info { 56struct platform_device_info {
57 struct device *parent; 57 struct device *parent;
58 struct acpi_dev_node acpi_node;
58 59
59 const char *name; 60 const char *name;
60 int id; 61 int id;