Files
cdba/device.h
Neil Armstrong 87fbc38286 Add local gpio control
This driver permits controlling local (on the system) gpios
by using the libgpiod library.

Support for gpiod v1 and v2 is added, and parses the options
via the yaml parser.

This can be tested with the gpio-sim module:
https://docs.kernel.org/admin-guide/gpio/gpio-sim.html

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
2023-10-30 16:16:36 +01:00

104 lines
2.5 KiB
C

#ifndef __DEVICE_H__
#define __DEVICE_H__
#include <termios.h>
#include "list.h"
struct cdb_assist;
struct fastboot;
struct fastboot_ops;
struct device;
struct device_parser;
struct control_ops {
void *(*parse_options)(struct device_parser *dp);
void *(*open)(struct device *dev);
void (*close)(struct device *dev);
int (*power)(struct device *dev, bool on);
void (*usb)(struct device *dev, bool on);
void (*key)(struct device *device, int key, bool asserted);
void (*print_status)(struct device *dev);
};
struct console_ops {
void *(*open)(struct device *dev);
int (*write)(struct device *dev, const void *buf, size_t len);
void (*send_break)(struct device *dev);
};
struct device {
char *board;
char *control_dev;
void *control_options;
char *console_dev;
char *name;
char *serial;
char *description;
char *ppps_path;
struct list_head *users;
unsigned voltage;
bool tickle_mmc;
bool usb_always_on;
struct fastboot *fastboot;
unsigned int fastboot_key_timeout;
int state;
bool has_power_key;
void (*boot)(struct device *);
const struct control_ops *control_ops;
const struct console_ops *console_ops;
const char *set_active;
void *cdb;
void *console;
struct list_head node;
};
struct device_user {
const char *username;
struct list_head node;
};
void device_add(struct device *device);
struct device *device_open(const char *board,
const char *username,
struct fastboot_ops *fastboot_ops);
void device_close(struct device *dev);
int device_power(struct device *device, bool on);
void device_print_status(struct device *device);
void device_usb(struct device *device, bool on);
int device_write(struct device *device, const void *buf, size_t len);
void device_boot(struct device *device, const void *data, size_t len);
void device_fastboot_boot(struct device *device);
void device_fastboot_flash_reboot(struct device *device);
void device_send_break(struct device *device);
void device_list_devices(const char *username);
void device_info(const char *username, const void *data, size_t dlen);
enum {
DEVICE_KEY_FASTBOOT,
DEVICE_KEY_POWER,
};
extern const struct control_ops alpaca_ops;
extern const struct control_ops cdb_assist_ops;
extern const struct control_ops conmux_ops;
extern const struct control_ops ftdi_gpio_ops;
extern const struct control_ops local_gpio_ops;
extern const struct control_ops external_ops;
extern const struct control_ops qcomlt_dbg_ops;
extern const struct console_ops conmux_console_ops;
extern const struct console_ops console_ops;
#endif