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 device dev; |
19 | struct ulpi_device_id id; |
20 | const struct ulpi_ops *ops; |
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(dev: &ulpi->dev, data); |
28 | } |
29 | |
30 | static inline void *ulpi_get_drvdata(struct ulpi *ulpi) |
31 | { |
32 | return dev_get_drvdata(dev: &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 */ |
66 | |