Module Name: src Committed By: hkenken Date: Tue Jul 30 06:52:58 UTC 2019
Modified Files: src/sys/arch/arm/imx: imxi2c.c src/sys/arch/arm/imx/fdt: files.imx6 src/sys/arch/evbarm/conf: IMX Added Files: src/sys/arch/arm/imx/fdt: imx6_i2c.c Log Message: Add IIC support. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/imx/imxi2c.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/imx/fdt/files.imx6 cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/imx/fdt/imx6_i2c.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/evbarm/conf/IMX Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/imx/imxi2c.c diff -u src/sys/arch/arm/imx/imxi2c.c:1.2 src/sys/arch/arm/imx/imxi2c.c:1.3 --- src/sys/arch/arm/imx/imxi2c.c:1.2 Fri Mar 27 05:31:23 2015 +++ src/sys/arch/arm/imx/imxi2c.c Tue Jul 30 06:52:57 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: imxi2c.c,v 1.2 2015/03/27 05:31:23 hkenken Exp $ */ +/* $NetBSD: imxi2c.c,v 1.3 2019/07/30 06:52:57 hkenken Exp $ */ /* * Copyright (c) 2012, 2015 Genetec Corporation. All rights reserved. @@ -27,9 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imxi2c.c,v 1.2 2015/03/27 05:31:23 hkenken Exp $"); - -#include "opt_imx.h" +__KERNEL_RCSID(0, "$NetBSD: imxi2c.c,v 1.3 2019/07/30 06:52:57 hkenken Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -39,12 +37,10 @@ __KERNEL_RCSID(0, "$NetBSD: imxi2c.c,v 1 #include <dev/i2c/motoi2creg.h> #include <arm/imx/imxi2cvar.h> -struct clk_div { +static const struct clk_div { uint8_t ic_val; int div; -}; - -static const struct clk_div imxi2c_clk_div[] = { +} imxi2c_clk_div[] = { {0x20, 22}, {0x21, 24}, {0x22, 26}, {0x23, 28}, {0x00, 30}, {0x01, 32}, {0x24, 32}, {0x02, 36}, {0x25, 36}, {0x26, 40}, {0x03, 42}, {0x27, 44}, Index: src/sys/arch/arm/imx/fdt/files.imx6 diff -u src/sys/arch/arm/imx/fdt/files.imx6:1.3 src/sys/arch/arm/imx/fdt/files.imx6:1.4 --- src/sys/arch/arm/imx/fdt/files.imx6:1.3 Tue Jul 30 06:26:31 2019 +++ src/sys/arch/arm/imx/fdt/files.imx6 Tue Jul 30 06:52:57 2019 @@ -1,4 +1,4 @@ -# $NetBSD: files.imx6,v 1.3 2019/07/30 06:26:31 hkenken Exp $ +# $NetBSD: files.imx6,v 1.4 2019/07/30 06:52:57 hkenken Exp $ # # Configuration info for the Freescale i.MX6 # @@ -78,3 +78,9 @@ device imxpcie: pcibus attach imxpcie at fdt with imxpcie_fdt file arch/arm/imx/imxpcie.c imxpcie file arch/arm/imx/fdt/imx6_pcie.c imxpcie_fdt + +# iMX iic Controler +device imxi2c: motoi2c, i2cbus, i2cexec +attach imxi2c at fdt +file arch/arm/imx/imxi2c.c imxi2c +file arch/arm/imx/fdt/imx6_i2c.c imxi2c Index: src/sys/arch/evbarm/conf/IMX diff -u src/sys/arch/evbarm/conf/IMX:1.1 src/sys/arch/evbarm/conf/IMX:1.2 --- src/sys/arch/evbarm/conf/IMX:1.1 Wed Jul 24 13:12:34 2019 +++ src/sys/arch/evbarm/conf/IMX Tue Jul 30 06:52:57 2019 @@ -1,5 +1,5 @@ # -# $NetBSD: IMX,v 1.1 2019/07/24 13:12:34 hkenken Exp $ +# $NetBSD: IMX,v 1.2 2019/07/30 06:52:57 hkenken Exp $ # # NXP(Freescale) I.MX family SoCs # @@ -130,5 +130,9 @@ pci* at imxpcie? ppb* at pci? dev ? function ? pci* at ppb? +# IIC +imxi2c* at fdt? +iic* at imxi2c? + cinclude "arch/evbarm/conf/IMX.local" Added files: Index: src/sys/arch/arm/imx/fdt/imx6_i2c.c diff -u /dev/null src/sys/arch/arm/imx/fdt/imx6_i2c.c:1.1 --- /dev/null Tue Jul 30 06:52:58 2019 +++ src/sys/arch/arm/imx/fdt/imx6_i2c.c Tue Jul 30 06:52:57 2019 @@ -0,0 +1,80 @@ +/* $NetBSD: imx6_i2c.c,v 1.1 2019/07/30 06:52:57 hkenken Exp $ */ +/*- + * Copyright (c) 2019 Genetec Corporation. All rights reserved. + * Written by Hashimoto Kenichi for Genetec Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include <sys/cdefs.h> +__KERNEL_RCSID(0, "$NetBSD: imx6_i2c.c,v 1.1 2019/07/30 06:52:57 hkenken Exp $"); + +#include <sys/bus.h> + +#include <arm/imx/imxi2cvar.h> + +#include <dev/fdt/fdtvar.h> + +int +imxi2c_match(device_t parent, cfdata_t cf, void *aux) +{ + const char * const compatible[] = { "fsl,imx6q-i2c", NULL }; + struct fdt_attach_args * const faa = aux; + + return of_match_compatible(faa->faa_phandle, compatible); +} + +void +imxi2c_attach(device_t parent __unused, device_t self, void *aux) +{ + struct imxi2c_softc *sc = device_private(self); + struct fdt_attach_args * const faa = aux; + const int phandle = faa->faa_phandle; + bus_space_tag_t bst = faa->faa_bst; + bus_addr_t addr; + bus_size_t size; + int error; + + if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) { + aprint_error(": couldn't get registers\n"); + return; + } + + sc->sc_clk = fdtbus_clock_get_index(phandle, 0); + if (sc->sc_clk == NULL) { + aprint_error(": couldn't get clock\n"); + return; + } + + error = clk_enable(sc->sc_clk); + if (error) { + aprint_error_dev(sc->sc_dev, "couldn't enable: %d\n", error); + return; + } + + u_int freq; + error = of_getprop_uint32(phandle, "clock-frequency", &freq); + if (error) + freq = 100000; + imxi2c_set_freq(self, clk_get_rate(sc->sc_clk), freq); + imxi2c_attach_common(parent, self, bst, addr, size, -1, 0); +} +