Blame view

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