linux/include/linux/ulpi/driver.h
<<
>>
Prefs
   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
   9struct 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 */
  17struct 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
  25static inline void ulpi_set_drvdata(struct ulpi *ulpi, void *data)
  26{
  27        dev_set_drvdata(&ulpi->dev, data);
  28}
  29
  30static 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 */
  42struct 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)
  55int __ulpi_register_driver(struct ulpi_driver *drv, struct module *module);
  56void 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
  62int ulpi_read(struct ulpi *ulpi, u8 addr);
  63int ulpi_write(struct ulpi *ulpi, u8 addr, u8 val);
  64
  65#endif /* __LINUX_ULPI_DRIVER_H */
  66