1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  *  Silicon Labs C2 port Linux support
4  *
5  *  Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it>
6  *  Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it>
7  */
8 
9 #define C2PORT_NAME_LEN			32
10 
11 struct device;
12 
13 /*
14  * C2 port basic structs
15  */
16 
17 /* Main struct */
18 struct c2port_ops;
19 struct c2port_device {
20 	unsigned int access:1;
21 	unsigned int flash_access:1;
22 
23 	int id;
24 	char name[C2PORT_NAME_LEN];
25 	struct c2port_ops *ops;
26 	struct mutex mutex;		/* prevent races during read/write */
27 
28 	struct device *dev;
29 
30 	void *private_data;
31 };
32 
33 /* Basic operations */
34 struct c2port_ops {
35 	/* Flash layout */
36 	unsigned short block_size;	/* flash block size in bytes */
37 	unsigned short blocks_num;	/* flash blocks number */
38 
39 	/* Enable or disable the access to C2 port */
40 	void (*access)(struct c2port_device *dev, int status);
41 
42 	/* Set C2D data line as input/output */
43 	void (*c2d_dir)(struct c2port_device *dev, int dir);
44 
45 	/* Read/write C2D data line */
46 	int (*c2d_get)(struct c2port_device *dev);
47 	void (*c2d_set)(struct c2port_device *dev, int status);
48 
49 	/* Write C2CK clock line */
50 	void (*c2ck_set)(struct c2port_device *dev, int status);
51 };
52 
53 /*
54  * Exported functions
55  */
56 
57 extern struct c2port_device *c2port_device_register(char *name,
58 					struct c2port_ops *ops, void *devdata);
59 extern void c2port_device_unregister(struct c2port_device *dev);
60