#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of_platform.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/suspend.h>
#include <linux/time.h>
#include <linux/greybus.h>
#include <linux/of.h>
#include "arche_platform.h"
#if IS_ENABLED(CONFIG_USB_HSIC_USB3613)
#include <linux/usb/usb3613.h>
#else
static inline int usb3613_hub_mode_ctrl(bool unused)
{ … }
#endif
#define WD_COLDBOOT_PULSE_WIDTH_MS …
enum svc_wakedetect_state { … };
struct arche_platform_drvdata { … };
static void arche_platform_set_state(struct arche_platform_drvdata *arche_pdata,
enum arche_platform_state state)
{ … }
static void arche_platform_set_wake_detect_state(struct arche_platform_drvdata *arche_pdata,
enum svc_wakedetect_state state)
{ … }
static inline void svc_reset_onoff(struct gpio_desc *gpio, bool onoff)
{ … }
static int apb_cold_boot(struct device *dev, void *data)
{ … }
static int apb_poweroff(struct device *dev, void *data)
{ … }
static void arche_platform_wd_irq_en(struct arche_platform_drvdata *arche_pdata)
{ … }
static irqreturn_t arche_platform_wd_irq_thread(int irq, void *devid)
{ … }
static irqreturn_t arche_platform_wd_irq(int irq, void *devid)
{ … }
static int
arche_platform_coldboot_seq(struct arche_platform_drvdata *arche_pdata)
{ … }
static int
arche_platform_fw_flashing_seq(struct arche_platform_drvdata *arche_pdata)
{ … }
static void
arche_platform_poweroff_seq(struct arche_platform_drvdata *arche_pdata)
{ … }
static ssize_t state_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static ssize_t state_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RW(state);
static int arche_platform_pm_notifier(struct notifier_block *notifier,
unsigned long pm_event, void *unused)
{ … }
static int arche_platform_probe(struct platform_device *pdev)
{ … }
static int arche_remove_child(struct device *dev, void *unused)
{ … }
static void arche_platform_remove(struct platform_device *pdev)
{ … }
static __maybe_unused int arche_platform_suspend(struct device *dev)
{ … }
static __maybe_unused int arche_platform_resume(struct device *dev)
{ … }
static void arche_platform_shutdown(struct platform_device *pdev)
{ … }
static SIMPLE_DEV_PM_OPS(arche_platform_pm_ops,
arche_platform_suspend,
arche_platform_resume);
static const struct of_device_id arche_platform_of_match[] = …;
MODULE_DEVICE_TABLE(of, arche_platform_of_match);
static struct platform_driver arche_platform_device_driver = …;
static int __init arche_init(void)
{ … }
module_init(…) …;
static void __exit arche_exit(void)
{ … }
module_exit(arche_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;