]>
Commit | Line | Data |
---|---|---|
1 | /* SPDX-License-Identifier: GPL-2.0 */ | |
2 | #ifndef __LINUX_ULPI_DRIVER_H | |
3 | #define __LINUX_ULPI_DRIVER_H | |
4 | ||
5 | #include <linux/mod_devicetable.h> | |
6 | ||
7 | #include <linux/device.h> | |
8 | ||
9 | struct ulpi_ops; | |
10 | ||
11 | /** | |
12 | * struct ulpi - describes ULPI PHY device | |
13 | * @id: vendor and product ids for ULPI device | |
14 | * @ops: I/O access | |
15 | * @dev: device interface | |
16 | */ | |
17 | struct ulpi { | |
18 | struct ulpi_device_id id; | |
19 | const struct ulpi_ops *ops; | |
20 | struct device dev; | |
21 | }; | |
22 | ||
23 | #define to_ulpi_dev(d) container_of(d, struct ulpi, dev) | |
24 | ||
25 | static inline void ulpi_set_drvdata(struct ulpi *ulpi, void *data) | |
26 | { | |
27 | dev_set_drvdata(&ulpi->dev, data); | |
28 | } | |
29 | ||
30 | static inline void *ulpi_get_drvdata(struct ulpi *ulpi) | |
31 | { | |
32 | return dev_get_drvdata(&ulpi->dev); | |
33 | } | |
34 | ||
35 | /** | |
36 | * struct ulpi_driver - describes a ULPI PHY driver | |
37 | * @id_table: array of device identifiers supported by this driver | |
38 | * @probe: binds this driver to ULPI device | |
39 | * @remove: unbinds this driver from ULPI device | |
40 | * @driver: the name and owner members must be initialized by the drivers | |
41 | */ | |
42 | struct ulpi_driver { | |
43 | const struct ulpi_device_id *id_table; | |
44 | int (*probe)(struct ulpi *ulpi); | |
45 | void (*remove)(struct ulpi *ulpi); | |
46 | struct device_driver driver; | |
47 | }; | |
48 | ||
49 | #define to_ulpi_driver(d) container_of(d, struct ulpi_driver, driver) | |
50 | ||
51 | /* | |
52 | * use a macro to avoid include chaining to get THIS_MODULE | |
53 | */ | |
54 | #define ulpi_register_driver(drv) __ulpi_register_driver(drv, THIS_MODULE) | |
55 | int __ulpi_register_driver(struct ulpi_driver *drv, struct module *module); | |
56 | void ulpi_unregister_driver(struct ulpi_driver *drv); | |
57 | ||
58 | #define module_ulpi_driver(__ulpi_driver) \ | |
59 | module_driver(__ulpi_driver, ulpi_register_driver, \ | |
60 | ulpi_unregister_driver) | |
61 | ||
62 | int ulpi_read(struct ulpi *ulpi, u8 addr); | |
63 | int ulpi_write(struct ulpi *ulpi, u8 addr, u8 val); | |
64 | ||
65 | #endif /* __LINUX_ULPI_DRIVER_H */ |