c2port.h (1384B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Silicon Labs C2 port Linux support 4 * 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 32 10 11struct device; 12 13/* 14 * C2 port basic structs 15 */ 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 functions 55 */ 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);