diff options
| author | Paul Mackerras <paulus@samba.org> | 2008-11-19 16:10:32 +1100 | 
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2008-11-19 16:10:32 +1100 | 
| commit | cea555d384b85271035814c5adad23e6c7fc5d2a (patch) | |
| tree | 1181b6333a69a135293ec75f8a48c849ee32c015 /include/linux/c2port.h | |
| parent | 78608dd32ce46789e970d6c3c423cd668c138d6c (diff) | |
| parent | 7f0f598a0069d1ab072375965a4b69137233169c (diff) | |
| download | olio-linux-3.10-cea555d384b85271035814c5adad23e6c7fc5d2a.tar.xz olio-linux-3.10-cea555d384b85271035814c5adad23e6c7fc5d2a.zip  | |
Merge branch 'linux-2.6' into next
Diffstat (limited to 'include/linux/c2port.h')
| -rw-r--r-- | include/linux/c2port.h | 65 | 
1 files changed, 65 insertions, 0 deletions
diff --git a/include/linux/c2port.h b/include/linux/c2port.h new file mode 100644 index 00000000000..7b5a2388ba6 --- /dev/null +++ b/include/linux/c2port.h @@ -0,0 +1,65 @@ +/* + *  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 + */ + +#include <linux/device.h> + +#define C2PORT_NAME_LEN			32 + +/* + * 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 + */ + +#define to_class_dev(obj) container_of((obj), struct class_device, kobj) +#define to_c2port_device(obj) container_of((obj), struct c2port_device, class) + +extern struct c2port_device *c2port_device_register(char *name, +					struct c2port_ops *ops, void *devdata); +extern void c2port_device_unregister(struct c2port_device *dev);  |