/* SPDX-License-Identifier: GPL-2.0 */ #ifndef TOUCHSCREEN_BUS_NEGOTIATOR_H #define TOUCHSCREEN_BUS_NEGOTIATOR_H #include #include #include #define TBN_REQUEST_BUS_TIMEOUT_MS 500 #define TBN_RELEASE_BUS_TIMEOUT_MS 500 enum tbn_mode { TBN_MODE_DISABLED, TBN_MODE_GPIO, TBN_MODE_MAILBOX, }; enum tbn_bus_owner { TBN_BUS_OWNER_AP = 0, TBN_BUS_OWNER_AOC = 1, }; struct tbn_context { struct device *dev; struct completion bus_requested; struct completion bus_released; struct mutex dev_mask_mutex; u8 mode; u32 max_devices; u32 registered_mask; u32 requested_dev_mask; int aoc2ap_gpio; int ap2aoc_gpio; int aoc2ap_irq; }; int register_tbn(u32 *output); void unregister_tbn(u32 *output); int tbn_request_bus(u32 dev_mask); int tbn_release_bus(u32 dev_mask); #endif /* TOUCHSCREEN_BUS_NEGOTIATOR_H */