1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 24e17e1dbSRodolfo Giometti /* 34e17e1dbSRodolfo Giometti * Silicon Labs C2 port Linux support 44e17e1dbSRodolfo Giometti * 54e17e1dbSRodolfo Giometti * Copyright (c) 2007 Rodolfo Giometti <giometti@linux.it> 64e17e1dbSRodolfo Giometti * Copyright (c) 2007 Eurotech S.p.A. <info@eurotech.it> 74e17e1dbSRodolfo Giometti */ 84e17e1dbSRodolfo Giometti 94e17e1dbSRodolfo Giometti #define C2PORT_NAME_LEN 32 104e17e1dbSRodolfo Giometti 11313162d0SPaul Gortmaker struct device; 12313162d0SPaul Gortmaker 134e17e1dbSRodolfo Giometti /* 144e17e1dbSRodolfo Giometti * C2 port basic structs 154e17e1dbSRodolfo Giometti */ 164e17e1dbSRodolfo Giometti 174e17e1dbSRodolfo Giometti /* Main struct */ 184e17e1dbSRodolfo Giometti struct c2port_ops; 194e17e1dbSRodolfo Giometti struct c2port_device { 204e17e1dbSRodolfo Giometti unsigned int access:1; 214e17e1dbSRodolfo Giometti unsigned int flash_access:1; 224e17e1dbSRodolfo Giometti 234e17e1dbSRodolfo Giometti int id; 244e17e1dbSRodolfo Giometti char name[C2PORT_NAME_LEN]; 254e17e1dbSRodolfo Giometti struct c2port_ops *ops; 264e17e1dbSRodolfo Giometti struct mutex mutex; /* prevent races during read/write */ 274e17e1dbSRodolfo Giometti 284e17e1dbSRodolfo Giometti struct device *dev; 294e17e1dbSRodolfo Giometti 304e17e1dbSRodolfo Giometti void *private_data; 314e17e1dbSRodolfo Giometti }; 324e17e1dbSRodolfo Giometti 334e17e1dbSRodolfo Giometti /* Basic operations */ 344e17e1dbSRodolfo Giometti struct c2port_ops { 354e17e1dbSRodolfo Giometti /* Flash layout */ 364e17e1dbSRodolfo Giometti unsigned short block_size; /* flash block size in bytes */ 374e17e1dbSRodolfo Giometti unsigned short blocks_num; /* flash blocks number */ 384e17e1dbSRodolfo Giometti 394e17e1dbSRodolfo Giometti /* Enable or disable the access to C2 port */ 404e17e1dbSRodolfo Giometti void (*access)(struct c2port_device *dev, int status); 414e17e1dbSRodolfo Giometti 424e17e1dbSRodolfo Giometti /* Set C2D data line as input/output */ 434e17e1dbSRodolfo Giometti void (*c2d_dir)(struct c2port_device *dev, int dir); 444e17e1dbSRodolfo Giometti 454e17e1dbSRodolfo Giometti /* Read/write C2D data line */ 464e17e1dbSRodolfo Giometti int (*c2d_get)(struct c2port_device *dev); 474e17e1dbSRodolfo Giometti void (*c2d_set)(struct c2port_device *dev, int status); 484e17e1dbSRodolfo Giometti 494e17e1dbSRodolfo Giometti /* Write C2CK clock line */ 504e17e1dbSRodolfo Giometti void (*c2ck_set)(struct c2port_device *dev, int status); 514e17e1dbSRodolfo Giometti }; 524e17e1dbSRodolfo Giometti 534e17e1dbSRodolfo Giometti /* 544e17e1dbSRodolfo Giometti * Exported functions 554e17e1dbSRodolfo Giometti */ 564e17e1dbSRodolfo Giometti 574e17e1dbSRodolfo Giometti extern struct c2port_device *c2port_device_register(char *name, 584e17e1dbSRodolfo Giometti struct c2port_ops *ops, void *devdata); 594e17e1dbSRodolfo Giometti extern void c2port_device_unregister(struct c2port_device *dev); 60