1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright (c) 2000 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #ifndef	_PCF8574_IMPL_H
28 #define	_PCF8574_IMPL_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 #include <sys/i2c/clients/i2c_client.h>
37 
38 /*
39  * PCF8574_BIT_READ_MASK takes in a byte from the device and the bit that
40  * the user wants to read.  I shifts the byte over so that the bit that we
41  * want is in the 1's bit and masks out the rest of the byte.
42  */
43 #define	PCF8574_BIT_READ_MASK(byte, bit)	((byte >> bit) & 0x01)
44 
45 /*
46  * PCF8574_BIT_WRITE_MASK takes in a byte from the device, the bit that the
47  * user wants to read write, and the value that the user wants put into that
48  * bit. It zero's out the bit that we are writing to in the byte and then or's
49  * the value(which was shifted to the bit location we wanted) to fill in only
50  * that bit in the byte
51  */
52 #define	PCF8574_BIT_WRITE_MASK(byte, bit, value)\
53 				((value << bit) | (byte & (~(0x01 << bit))))
54 
55 struct pcf8574_unit {
56 	kmutex_t		pcf8574_mutex;
57 	uint8_t			pcf8574_flags;
58 	int			pcf8574_oflag;
59 	i2c_client_hdl_t	pcf8574_hdl;
60 	char			pcf8574_name[24];
61 };
62 
63 #ifdef DEBUG
64 
65 static int pcf8574debug = 0;
66 #define	D1CMN_ERR(ARGS) if (pcf8574debug & 0x1) cmn_err ARGS;
67 #define	D2CMN_ERR(ARGS) if (pcf8574debug & 0x2) cmn_err ARGS;
68 
69 #else
70 
71 #define	D1CMN_ERR(ARGS)
72 #define	D2CMN_ERR(ARGS)
73 
74 #endif
75 
76 
77 #ifdef	__cplusplus
78 }
79 #endif
80 
81 #endif	/* _PCF8574_IMPL_H */
82