xref: /freebsd/sys/dev/iicbus/controller/vybrid/vf_i2c.h (revision 5ca8e32633c4ffbbcd6762e5888b6a4ba0708c6c)
1*5ca8e326SPierre-Luc Drouin /*-
2*5ca8e326SPierre-Luc Drouin  * SPDX-License-Identifier: BSD-2-Clause
3*5ca8e326SPierre-Luc Drouin  *
4*5ca8e326SPierre-Luc Drouin  * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
5*5ca8e326SPierre-Luc Drouin  * Copyright (c) 2024 Pierre-Luc Drouin <pldrouin@pldrouin.net>
6*5ca8e326SPierre-Luc Drouin  *
7*5ca8e326SPierre-Luc Drouin  * Redistribution and use in source and binary forms, with or without
8*5ca8e326SPierre-Luc Drouin  * modification, are permitted provided that the following conditions
9*5ca8e326SPierre-Luc Drouin  * are met:
10*5ca8e326SPierre-Luc Drouin  * 1. Redistributions of source code must retain the above copyright
11*5ca8e326SPierre-Luc Drouin  *    notice, this list of conditions and the following disclaimer.
12*5ca8e326SPierre-Luc Drouin  * 2. Redistributions in binary form must reproduce the above copyright
13*5ca8e326SPierre-Luc Drouin  *    notice, this list of conditions and the following disclaimer in the
14*5ca8e326SPierre-Luc Drouin  *    documentation and/or other materials provided with the distribution.
15*5ca8e326SPierre-Luc Drouin  *
16*5ca8e326SPierre-Luc Drouin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17*5ca8e326SPierre-Luc Drouin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*5ca8e326SPierre-Luc Drouin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*5ca8e326SPierre-Luc Drouin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20*5ca8e326SPierre-Luc Drouin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21*5ca8e326SPierre-Luc Drouin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22*5ca8e326SPierre-Luc Drouin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23*5ca8e326SPierre-Luc Drouin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24*5ca8e326SPierre-Luc Drouin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*5ca8e326SPierre-Luc Drouin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*5ca8e326SPierre-Luc Drouin  * SUCH DAMAGE.
27*5ca8e326SPierre-Luc Drouin  */
28*5ca8e326SPierre-Luc Drouin 
29*5ca8e326SPierre-Luc Drouin /*
30*5ca8e326SPierre-Luc Drouin  * Vybrid Family Inter-Integrated Circuit (I2C)
31*5ca8e326SPierre-Luc Drouin  * Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
32*5ca8e326SPierre-Luc Drouin  *
33*5ca8e326SPierre-Luc Drouin  * The current implementation is based on the original driver by Ruslan Bukin,
34*5ca8e326SPierre-Luc Drouin  * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
35*5ca8e326SPierre-Luc Drouin  * Packett.
36*5ca8e326SPierre-Luc Drouin  */
37*5ca8e326SPierre-Luc Drouin 
38*5ca8e326SPierre-Luc Drouin #ifndef __VF_I2C_H__
39*5ca8e326SPierre-Luc Drouin #define __VF_I2C_H__
40*5ca8e326SPierre-Luc Drouin 
41*5ca8e326SPierre-Luc Drouin #include "opt_acpi.h"
42*5ca8e326SPierre-Luc Drouin #include "opt_platform.h"
43*5ca8e326SPierre-Luc Drouin 
44*5ca8e326SPierre-Luc Drouin #ifdef FDT
45*5ca8e326SPierre-Luc Drouin #include <dev/clk/clk.h>
46*5ca8e326SPierre-Luc Drouin #endif
47*5ca8e326SPierre-Luc Drouin 
48*5ca8e326SPierre-Luc Drouin #define VF_I2C_DEVSTR "Vybrid Family Inter-Integrated Circuit (I2C)"
49*5ca8e326SPierre-Luc Drouin 
50*5ca8e326SPierre-Luc Drouin #define HW_MVF600       0x01
51*5ca8e326SPierre-Luc Drouin #define HW_VF610        0x02
52*5ca8e326SPierre-Luc Drouin 
53*5ca8e326SPierre-Luc Drouin #define MVF600_DIV_REG	0x14
54*5ca8e326SPierre-Luc Drouin 
55*5ca8e326SPierre-Luc Drouin #define VF_I2C_DEFAULT_BUS_SPEED	100000
56*5ca8e326SPierre-Luc Drouin 
57*5ca8e326SPierre-Luc Drouin struct vf_i2c_softc {
58*5ca8e326SPierre-Luc Drouin 	struct resource         *res[2];
59*5ca8e326SPierre-Luc Drouin 	bus_space_tag_t         bst;
60*5ca8e326SPierre-Luc Drouin 	bus_space_handle_t      bsh;
61*5ca8e326SPierre-Luc Drouin 	uint32_t                freq;
62*5ca8e326SPierre-Luc Drouin 	device_t                dev;
63*5ca8e326SPierre-Luc Drouin 	device_t                iicbus;
64*5ca8e326SPierre-Luc Drouin 	struct mtx              mutex;
65*5ca8e326SPierre-Luc Drouin 	uintptr_t               hwtype;
66*5ca8e326SPierre-Luc Drouin #ifdef FDT
67*5ca8e326SPierre-Luc Drouin 	clk_t                   clock;
68*5ca8e326SPierre-Luc Drouin #endif
69*5ca8e326SPierre-Luc Drouin };
70*5ca8e326SPierre-Luc Drouin 
71*5ca8e326SPierre-Luc Drouin extern driver_t vf_i2c_driver;
72*5ca8e326SPierre-Luc Drouin 
73*5ca8e326SPierre-Luc Drouin device_attach_t vf_i2c_attach_common;
74*5ca8e326SPierre-Luc Drouin 
75*5ca8e326SPierre-Luc Drouin #endif /* !__VF_I2C_H__ */
76