FreeBSD kernel IICBUS device code
iic_recover_bus.h
Go to the documentation of this file.
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2017 Ian Lepore <ian@freebsd.org>
5
*
6
* Development sponsored by Microsemi, Inc.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions
10
* are met:
11
* 1. Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* $FreeBSD$
30
*/
31
32
/*
33
* Helper code to recover a hung i2c bus by bit-banging a recovery sequence.
34
*/
35
36
#ifndef _IICBUS_IIC_RECOVER_BUS_H_
37
#define _IICBUS_IIC_RECOVER_BUS_H_
38
39
struct
iicrb_pin_access
{
40
void
*
ctx
;
41
int (*
getsda
)(
void
*
ctx
);
42
void (*
setsda
)(
void
*
ctx
,
int
value);
43
int (*
getscl
)(
void
*
ctx
);
44
void (*
setscl
)(
void
*
ctx
,
int
value);
45
};
46
47
/*
48
* Drive the bus-recovery logic by manipulating the line states using the
49
* caller-provided functions. This does not block or sleep or acquire any locks
50
* (unless the provided pin access functions do so). It uses DELAY() to pace
51
* bits on the bus.
52
*
53
* Returns 0 if the bus is functioning properly or IIC_EBUSERR if the recovery
54
* attempt failed and some slave device is still driving the bus.
55
*/
56
int
iic_recover_bus
(
struct
iicrb_pin_access
*pins);
57
58
#endif
iic_recover_bus
int iic_recover_bus(struct iicrb_pin_access *pins)
Definition:
iic_recover_bus.c:60
iicrb_pin_access
Definition:
iic_recover_bus.h:39
iicrb_pin_access::getsda
int(* getsda)(void *ctx)
Definition:
iic_recover_bus.h:41
iicrb_pin_access::getscl
int(* getscl)(void *ctx)
Definition:
iic_recover_bus.h:43
iicrb_pin_access::setscl
void(* setscl)(void *ctx, int value)
Definition:
iic_recover_bus.h:44
iicrb_pin_access::ctx
void * ctx
Definition:
iic_recover_bus.h:40
iicrb_pin_access::setsda
void(* setsda)(void *ctx, int value)
Definition:
iic_recover_bus.h:42
dev
iicbus
iic_recover_bus.h
Generated by
1.9.3