#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/mailbox_controller.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_wakeirq.h>
#define IPCC_XCR …
#define XCR_RXOIE …
#define XCR_TXOIE …
#define IPCC_XMR …
#define IPCC_XSCR …
#define IPCC_XTOYSR …
#define IPCC_PROC_OFFST …
#define IPCC_HWCFGR …
#define IPCFGR_CHAN_MASK …
#define IPCC_VER …
#define VER_MINREV_MASK …
#define VER_MAJREV_MASK …
#define RX_BIT_MASK …
#define RX_BIT_CHAN(chan) …
#define TX_BIT_SHIFT …
#define TX_BIT_MASK …
#define TX_BIT_CHAN(chan) …
#define STM32_MAX_PROCS …
enum { … };
struct stm32_ipcc { … };
static inline void stm32_ipcc_set_bits(spinlock_t *lock, void __iomem *reg,
u32 mask)
{ … }
static inline void stm32_ipcc_clr_bits(spinlock_t *lock, void __iomem *reg,
u32 mask)
{ … }
static irqreturn_t stm32_ipcc_rx_irq(int irq, void *data)
{ … }
static irqreturn_t stm32_ipcc_tx_irq(int irq, void *data)
{ … }
static int stm32_ipcc_send_data(struct mbox_chan *link, void *data)
{ … }
static int stm32_ipcc_startup(struct mbox_chan *link)
{ … }
static void stm32_ipcc_shutdown(struct mbox_chan *link)
{ … }
static const struct mbox_chan_ops stm32_ipcc_ops = …;
static int stm32_ipcc_probe(struct platform_device *pdev)
{ … }
static void stm32_ipcc_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_PM_SLEEP
static int stm32_ipcc_suspend(struct device *dev)
{ … }
static int stm32_ipcc_resume(struct device *dev)
{ … }
#endif
static SIMPLE_DEV_PM_OPS(stm32_ipcc_pm_ops,
stm32_ipcc_suspend, stm32_ipcc_resume);
static const struct of_device_id stm32_ipcc_of_match[] = …;
MODULE_DEVICE_TABLE(of, stm32_ipcc_of_match);
static struct platform_driver stm32_ipcc_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;