xref: /openbmc/linux/include/linux/c2port.h (revision d2912cb1)
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