1#- 2# Copyright (c) 1998 Nicolas Souchu 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24# SUCH DAMAGE. 25# 26# $FreeBSD$ 27# 28 29#include <sys/bus.h> 30#include <dev/iicbus/iic.h> 31 32INTERFACE iicbus; 33 34CODE { 35 static u_int 36 iicbus_default_frequency(device_t bus, u_char speed) 37 { 38 39 return (100000); 40 } 41}; 42 43# 44# Interpret interrupt 45# 46METHOD int intr { 47 device_t dev; 48 int event; 49 char *buf; 50}; 51 52# 53# iicbus callback 54# Request ownership of bus 55# index: IIC_REQUEST_BUS or IIC_RELEASE_BUS 56# data: pointer to int containing IIC_WAIT or IIC_DONTWAIT and either IIC_INTR or IIC_NOINTR 57# This function is allowed to sleep if *data contains IIC_WAIT. 58# 59METHOD int callback { 60 device_t dev; 61 int index; 62 caddr_t data; 63}; 64 65# 66# Send REPEATED_START condition 67# 68METHOD int repeated_start { 69 device_t dev; 70 u_char slave; 71 int timeout; 72}; 73 74# 75# Send START condition 76# 77METHOD int start { 78 device_t dev; 79 u_char slave; 80 int timeout; 81}; 82 83# 84# Send STOP condition 85# 86METHOD int stop { 87 device_t dev; 88}; 89 90# 91# Read from I2C bus 92# 93METHOD int read { 94 device_t dev; 95 char *buf; 96 int len; 97 int *bytes; 98 int last; 99 int delay; 100}; 101 102# 103# Write to the I2C bus 104# 105METHOD int write { 106 device_t dev; 107 const char *buf; 108 int len; 109 int *bytes; 110 int timeout; 111}; 112 113# 114# Reset I2C bus 115# 116METHOD int reset { 117 device_t dev; 118 u_char speed; 119 u_char addr; 120 u_char *oldaddr; 121}; 122 123# 124# Generalized Read/Write interface 125# 126METHOD int transfer { 127 device_t dev; 128 struct iic_msg *msgs; 129 uint32_t nmsgs; 130}; 131 132# 133# Return the frequency in Hz for the bus running at the given 134# symbolic speed. Only the IIC_SLOW speed has meaning, it is always 135# 100KHz. The UNKNOWN, FAST, and FASTEST rates all map to the 136# configured bus frequency, or 100KHz when not otherwise configured. 137# 138METHOD u_int get_frequency { 139 device_t dev; 140 u_char speed; 141} DEFAULT iicbus_default_frequency; 142