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