include/linux/c2port.h
author Florian Westphal <fw@strlen.de>
Thu, 09 Apr 2009 12:07:21 +0200
changeset 2 d1f6d8b6f81c
permissions -rw-r--r--
Linux 2.6.29 for NSC 0.5.0.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     1
/*
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     2
 *  Silicon Labs C2 port Linux support
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     3
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     4
 *  Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it>
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     5
 *  Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it>
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     6
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     7
 * This program is free software; you can redistribute it and/or modify it
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     8
 * under the terms of the GNU General Public License version 2 as published by
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     9
 * the Free Software Foundation
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    10
 */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    11
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    12
#include <linux/device.h>
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    13
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    14
#define C2PORT_NAME_LEN			32
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    15
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    16
/*
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    17
 * C2 port basic structs
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    18
 */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    19
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    20
/* Main struct */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    21
struct c2port_ops;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    22
struct c2port_device {
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    23
	unsigned int access:1;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    24
	unsigned int flash_access:1;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    25
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    26
	int id;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    27
	char name[C2PORT_NAME_LEN];
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    28
	struct c2port_ops *ops;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    29
	struct mutex mutex;		/* prevent races during read/write */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    30
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    31
	struct device *dev;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    32
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    33
	void *private_data;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    34
};
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    35
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    36
/* Basic operations */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    37
struct c2port_ops {
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    38
	/* Flash layout */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    39
	unsigned short block_size;	/* flash block size in bytes */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    40
	unsigned short blocks_num;	/* flash blocks number */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    41
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    42
	/* Enable or disable the access to C2 port */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    43
	void (*access)(struct c2port_device *dev, int status);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    44
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    45
	/* Set C2D data line as input/output */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    46
	void (*c2d_dir)(struct c2port_device *dev, int dir);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    47
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    48
	/* Read/write C2D data line */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    49
	int (*c2d_get)(struct c2port_device *dev);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    50
	void (*c2d_set)(struct c2port_device *dev, int status);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    51
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    52
	/* Write C2CK clock line */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    53
	void (*c2ck_set)(struct c2port_device *dev, int status);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    54
};
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    55
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    56
/*
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    57
 * Exported functions
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    58
 */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    59
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    60
#define to_class_dev(obj) container_of((obj), struct class_device, kobj)
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    61
#define to_c2port_device(obj) container_of((obj), struct c2port_device, class)
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    62
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    63
extern struct c2port_device *c2port_device_register(char *name,
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    64
					struct c2port_ops *ops, void *devdata);
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    65
extern void c2port_device_unregister(struct c2port_device *dev);