Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
c2port.h
Go to the documentation of this file.
1 /*
2  * Silicon Labs C2 port Linux support
3  *
4  * Copyright (c) 2007 Rodolfo Giometti <[email protected]>
5  * Copyright (c) 2007 Eurotech S.p.A. <[email protected]>
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 #include <linux/kmemcheck.h>
13 
14 #define C2PORT_NAME_LEN 32
15 
16 struct device;
17 
18 /*
19  * C2 port basic structs
20  */
21 
22 /* Main struct */
23 struct c2port_ops;
24 struct c2port_device {
26  unsigned int access:1;
27  unsigned int flash_access:1;
29 
30  int id;
32  struct c2port_ops *ops;
33  struct mutex mutex; /* prevent races during read/write */
34 
35  struct device *dev;
36 
37  void *private_data;
38 };
39 
40 /* Basic operations */
41 struct c2port_ops {
42  /* Flash layout */
43  unsigned short block_size; /* flash block size in bytes */
44  unsigned short blocks_num; /* flash blocks number */
45 
46  /* Enable or disable the access to C2 port */
47  void (*access)(struct c2port_device *dev, int status);
48 
49  /* Set C2D data line as input/output */
50  void (*c2d_dir)(struct c2port_device *dev, int dir);
51 
52  /* Read/write C2D data line */
54  void (*c2d_set)(struct c2port_device *dev, int status);
55 
56  /* Write C2CK clock line */
57  void (*c2ck_set)(struct c2port_device *dev, int status);
58 };
59 
60 /*
61  * Exported functions
62  */
63 
64 extern struct c2port_device *c2port_device_register(char *name,
65  struct c2port_ops *ops, void *devdata);
66 extern void c2port_device_unregister(struct c2port_device *dev);