xref: /freebsd/sys/dev/iicbus/controller/vybrid/vf_i2c.h (revision 44847114bd4c61ed3dfcc879fa0d7deb452e12d3)
15ca8e326SPierre-Luc Drouin /*-
25ca8e326SPierre-Luc Drouin  * SPDX-License-Identifier: BSD-2-Clause
35ca8e326SPierre-Luc Drouin  *
45ca8e326SPierre-Luc Drouin  * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
55ca8e326SPierre-Luc Drouin  * Copyright (c) 2024 Pierre-Luc Drouin <pldrouin@pldrouin.net>
65ca8e326SPierre-Luc Drouin  *
75ca8e326SPierre-Luc Drouin  * Redistribution and use in source and binary forms, with or without
85ca8e326SPierre-Luc Drouin  * modification, are permitted provided that the following conditions
95ca8e326SPierre-Luc Drouin  * are met:
105ca8e326SPierre-Luc Drouin  * 1. Redistributions of source code must retain the above copyright
115ca8e326SPierre-Luc Drouin  *    notice, this list of conditions and the following disclaimer.
125ca8e326SPierre-Luc Drouin  * 2. Redistributions in binary form must reproduce the above copyright
135ca8e326SPierre-Luc Drouin  *    notice, this list of conditions and the following disclaimer in the
145ca8e326SPierre-Luc Drouin  *    documentation and/or other materials provided with the distribution.
155ca8e326SPierre-Luc Drouin  *
165ca8e326SPierre-Luc Drouin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
175ca8e326SPierre-Luc Drouin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
185ca8e326SPierre-Luc Drouin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
195ca8e326SPierre-Luc Drouin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
205ca8e326SPierre-Luc Drouin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
215ca8e326SPierre-Luc Drouin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
225ca8e326SPierre-Luc Drouin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
235ca8e326SPierre-Luc Drouin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
245ca8e326SPierre-Luc Drouin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
255ca8e326SPierre-Luc Drouin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
265ca8e326SPierre-Luc Drouin  * SUCH DAMAGE.
275ca8e326SPierre-Luc Drouin  */
285ca8e326SPierre-Luc Drouin 
295ca8e326SPierre-Luc Drouin /*
305ca8e326SPierre-Luc Drouin  * Vybrid Family Inter-Integrated Circuit (I2C)
31*44847114SPierre-Luc Drouin  * Originally based on Chapter 48, Vybrid Reference Manual, Rev. 5, 07/2013
32*44847114SPierre-Luc Drouin  * Currently based on Chapter 21, LX2160A Reference Manual, Rev. 1, 10/2021
335ca8e326SPierre-Luc Drouin  *
345ca8e326SPierre-Luc Drouin  * The current implementation is based on the original driver by Ruslan Bukin,
355ca8e326SPierre-Luc Drouin  * later modified by Dawid Górecki, and split into FDT and ACPI drivers by Val
365ca8e326SPierre-Luc Drouin  * Packett.
375ca8e326SPierre-Luc Drouin  */
385ca8e326SPierre-Luc Drouin 
395ca8e326SPierre-Luc Drouin #ifndef __VF_I2C_H__
405ca8e326SPierre-Luc Drouin #define __VF_I2C_H__
415ca8e326SPierre-Luc Drouin 
425ca8e326SPierre-Luc Drouin #include "opt_acpi.h"
435ca8e326SPierre-Luc Drouin #include "opt_platform.h"
445ca8e326SPierre-Luc Drouin 
455ca8e326SPierre-Luc Drouin #ifdef FDT
465ca8e326SPierre-Luc Drouin #include <dev/clk/clk.h>
475ca8e326SPierre-Luc Drouin #endif
485ca8e326SPierre-Luc Drouin 
495ca8e326SPierre-Luc Drouin #define VF_I2C_DEVSTR "Vybrid Family Inter-Integrated Circuit (I2C)"
505ca8e326SPierre-Luc Drouin 
515ca8e326SPierre-Luc Drouin #define HW_MVF600       0x01
525ca8e326SPierre-Luc Drouin #define HW_VF610        0x02
535ca8e326SPierre-Luc Drouin 
545ca8e326SPierre-Luc Drouin #define MVF600_DIV_REG	0x14
555ca8e326SPierre-Luc Drouin 
565ca8e326SPierre-Luc Drouin #define VF_I2C_DEFAULT_BUS_SPEED	100000
575ca8e326SPierre-Luc Drouin 
585ca8e326SPierre-Luc Drouin struct vf_i2c_softc {
595ca8e326SPierre-Luc Drouin 	struct resource         *res[2];
605ca8e326SPierre-Luc Drouin 	bus_space_tag_t         bst;
615ca8e326SPierre-Luc Drouin 	bus_space_handle_t      bsh;
625ca8e326SPierre-Luc Drouin 	uint32_t                freq;
635ca8e326SPierre-Luc Drouin 	device_t                dev;
645ca8e326SPierre-Luc Drouin 	device_t                iicbus;
655ca8e326SPierre-Luc Drouin 	struct mtx              mutex;
665ca8e326SPierre-Luc Drouin 	uintptr_t               hwtype;
675ca8e326SPierre-Luc Drouin #ifdef FDT
685ca8e326SPierre-Luc Drouin 	clk_t                   clock;
695ca8e326SPierre-Luc Drouin #endif
705ca8e326SPierre-Luc Drouin };
715ca8e326SPierre-Luc Drouin 
725ca8e326SPierre-Luc Drouin extern driver_t vf_i2c_driver;
735ca8e326SPierre-Luc Drouin 
745ca8e326SPierre-Luc Drouin device_attach_t vf_i2c_attach_common;
755ca8e326SPierre-Luc Drouin 
765ca8e326SPierre-Luc Drouin #endif /* !__VF_I2C_H__ */
77