Add c2 port support
C2port implements a two wire serial communication protocol (bit banging) designed to enable in-system programming, debugging, and boundary-scan testing on low pin-count Silicon Labs devices. Currently this code supports only flash programming through sysfs interface but extensions shoud be easy to add. Signed-off-by: Rodolfo Giometti <giometti@linux.it> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
e0a29382c6
commit
4e17e1db96
65
include/linux/c2port.h
Normal file
65
include/linux/c2port.h
Normal file
@@ -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);
|
Reference in New Issue
Block a user