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 11 struct device; 12 13 /* 14 * C2 port basic structs 15 */ 16 17 /* Main struct */ 18 struct c2port_ops; 19 struct 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 */ 34 struct 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 57 extern struct c2port_device *c2port_device_register(char *name, 58 struct c2port_ops *ops, void *devdata); 59 extern void c2port_device_unregister(struct c2port_device *dev); 60