#include <linux/platform_device.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/rtc.h>
#include <linux/types.h>
#include <linux/bcd.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/slab.h>
#include <linux/io.h>
#define DS2404_STATUS_REG …
#define DS2404_CONTROL_REG …
#define DS2404_RTC_REG …
#define DS2404_WRITE_SCRATCHPAD_CMD …
#define DS2404_READ_SCRATCHPAD_CMD …
#define DS2404_COPY_SCRATCHPAD_CMD …
#define DS2404_READ_MEMORY_CMD …
#define DS2404_RST …
#define DS2404_CLK …
#define DS2404_DQ …
struct ds2404 { … };
static int ds2404_gpio_map(struct ds2404 *chip, struct platform_device *pdev)
{ … }
static void ds2404_reset(struct ds2404 *chip)
{ … }
static void ds2404_write_byte(struct ds2404 *chip, u8 byte)
{ … }
static u8 ds2404_read_byte(struct ds2404 *chip)
{ … }
static void ds2404_read_memory(struct ds2404 *chip, u16 offset,
int length, u8 *out)
{ … }
static void ds2404_write_memory(struct ds2404 *chip, u16 offset,
int length, u8 *out)
{ … }
static void ds2404_enable_osc(struct ds2404 *chip)
{ … }
static int ds2404_read_time(struct device *dev, struct rtc_time *dt)
{ … }
static int ds2404_set_time(struct device *dev, struct rtc_time *dt)
{ … }
static const struct rtc_class_ops ds2404_rtc_ops = …;
static int rtc_probe(struct platform_device *pdev)
{ … }
static struct platform_driver rtc_device_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;