1*5a158981SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0 */
2bbecb07fSUwe Kleine-König /*
3bbecb07fSUwe Kleine-König * Copyright (C) 2015-2017 Pengutronix, Uwe Kleine-König <kernel@pengutronix.de>
4bbecb07fSUwe Kleine-König */
5bbecb07fSUwe Kleine-König #include <linux/kernel.h>
6bbecb07fSUwe Kleine-König #include <linux/kthread.h>
7bbecb07fSUwe Kleine-König #include <linux/siox.h>
8bbecb07fSUwe Kleine-König
9bbecb07fSUwe Kleine-König #define to_siox_master(_dev) container_of((_dev), struct siox_master, dev)
10bbecb07fSUwe Kleine-König struct siox_master {
11bbecb07fSUwe Kleine-König /* these fields should be initialized by the driver */
12bbecb07fSUwe Kleine-König int busno;
13bbecb07fSUwe Kleine-König int (*pushpull)(struct siox_master *smaster,
14bbecb07fSUwe Kleine-König size_t setbuf_len, const u8 setbuf[],
15bbecb07fSUwe Kleine-König size_t getbuf_len, u8 getbuf[]);
16bbecb07fSUwe Kleine-König
17bbecb07fSUwe Kleine-König /* might be initialized by the driver, if 0 it is set to HZ / 40 */
18bbecb07fSUwe Kleine-König unsigned long poll_interval; /* in jiffies */
19bbecb07fSUwe Kleine-König
20bbecb07fSUwe Kleine-König /* framework private stuff */
21bbecb07fSUwe Kleine-König struct mutex lock;
22bbecb07fSUwe Kleine-König bool active;
23bbecb07fSUwe Kleine-König struct module *owner;
24bbecb07fSUwe Kleine-König struct device dev;
25bbecb07fSUwe Kleine-König unsigned int num_devices;
26bbecb07fSUwe Kleine-König struct list_head devices;
27bbecb07fSUwe Kleine-König
28bbecb07fSUwe Kleine-König size_t setbuf_len, getbuf_len;
29bbecb07fSUwe Kleine-König size_t buf_len;
30bbecb07fSUwe Kleine-König u8 *buf;
31bbecb07fSUwe Kleine-König u8 status;
32bbecb07fSUwe Kleine-König
33bbecb07fSUwe Kleine-König unsigned long last_poll;
34bbecb07fSUwe Kleine-König struct task_struct *poll_thread;
35bbecb07fSUwe Kleine-König };
36bbecb07fSUwe Kleine-König
siox_master_get_devdata(struct siox_master * smaster)37bbecb07fSUwe Kleine-König static inline void *siox_master_get_devdata(struct siox_master *smaster)
38bbecb07fSUwe Kleine-König {
39bbecb07fSUwe Kleine-König return dev_get_drvdata(&smaster->dev);
40bbecb07fSUwe Kleine-König }
41bbecb07fSUwe Kleine-König
42bbecb07fSUwe Kleine-König struct siox_master *siox_master_alloc(struct device *dev, size_t size);
siox_master_put(struct siox_master * smaster)43bbecb07fSUwe Kleine-König static inline void siox_master_put(struct siox_master *smaster)
44bbecb07fSUwe Kleine-König {
45bbecb07fSUwe Kleine-König put_device(&smaster->dev);
46bbecb07fSUwe Kleine-König }
47bbecb07fSUwe Kleine-König
48bbecb07fSUwe Kleine-König int siox_master_register(struct siox_master *smaster);
49bbecb07fSUwe Kleine-König void siox_master_unregister(struct siox_master *smaster);
50