mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 18:53:24 +00:00 
			
		
		
		
	 c53bd2e194
			
		
	
	
		c53bd2e194
		
	
	
	
	
		
			
			This silences a false positive warning with kmemcheck. Signed-off-by: Vegard Nossum <vegard.nossum@gmail.com>
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  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>
 | |
| #include <linux/kmemcheck.h>
 | |
| 
 | |
| #define C2PORT_NAME_LEN			32
 | |
| 
 | |
| /*
 | |
|  * C2 port basic structs
 | |
|  */
 | |
| 
 | |
| /* Main struct */
 | |
| struct c2port_ops;
 | |
| struct c2port_device {
 | |
| 	kmemcheck_bitfield_begin(flags);
 | |
| 	unsigned int access:1;
 | |
| 	unsigned int flash_access:1;
 | |
| 	kmemcheck_bitfield_end(flags);
 | |
| 
 | |
| 	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);
 |