60 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Silicon Labs C2 port Linux support4 *5 * Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it>6 * Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it>7 */8 9#define C2PORT_NAME_LEN 3210 11struct device;12 13/*14 * C2 port basic structs15 */16 17/* Main struct */18struct c2port_ops;19struct c2port_device {20 unsigned int access:1;21 unsigned int flash_access:1;22 23 int id;24 char name[C2PORT_NAME_LEN];25 struct c2port_ops *ops;26 struct mutex mutex; /* prevent races during read/write */27 28 struct device *dev;29 30 void *private_data;31};32 33/* Basic operations */34struct c2port_ops {35 /* Flash layout */36 unsigned short block_size; /* flash block size in bytes */37 unsigned short blocks_num; /* flash blocks number */38 39 /* Enable or disable the access to C2 port */40 void (*access)(struct c2port_device *dev, int status);41 42 /* Set C2D data line as input/output */43 void (*c2d_dir)(struct c2port_device *dev, int dir);44 45 /* Read/write C2D data line */46 int (*c2d_get)(struct c2port_device *dev);47 void (*c2d_set)(struct c2port_device *dev, int status);48 49 /* Write C2CK clock line */50 void (*c2ck_set)(struct c2port_device *dev, int status);51};52 53/*54 * Exported functions55 */56 57extern struct c2port_device *c2port_device_register(char *name,58 struct c2port_ops *ops, void *devdata);59extern void c2port_device_unregister(struct c2port_device *dev);60