Thank you for the changes.  That is not something I could have managed.
Attached is the dmesg with the new kernel.

Now I need to test.  I have a device on i2c1 at address 76.  Is there any
sample code I can copy to read it?

-----Original Message-----
From: Artturi Alm [mailto:artturi....@gmail.com] 
Sent: Wednesday, September 13, 2017 1:05 PM
To: Stephen Graf <s_g...@telus.net>
Subject: Re: help with sxitwi on allwinner H3

On Wed, Sep 13, 2017 at 12:59:05PM -0700, Stephen Graf wrote:
> Thank you.  I will give it a try.
> 
> -----Original Message-----
> From: owner-...@openbsd.org [mailto:owner-...@openbsd.org] On Behalf 
> Of Artturi Alm
> Sent: Wednesday, September 13, 2017 12:35 PM
> To: Stephen Graf <s_g...@telus.net>
> Cc: arm@openbsd.org
> Subject: Re: help with sxitwi on allwinner H3
> 
> On Wed, Sep 13, 2017 at 09:23:05PM +0300, Artturi Alm wrote:
> > On Wed, Sep 13, 2017 at 10:50:28AM -0700, Stephen Graf wrote:
> > > I am trying to get an i2c driver working on orange pi one (H3).
> > > Reading the H3 datasheet would lead me to believe that the switwi 
> > > driver should work.  The H3 data is the same except for 2 
> > > additional extended feature registers that should not be needed.
> > > 
> > > I modified the dtb and the sxitwi driver to set up H3 
> > > compatibility, rebuilt the kernel and got the following in the dmesg:
> > > 
> > > sxitwi0 at simplebus0sxiccmu_ccu_enable: 0x0000003b
> > > 
> > > iic0 at sxitwi0
> > > sxitwi1 at simplebus0sxiccmu_ccu_enable: 0x0000003c
> > > 
> > > iic1 at sxitwi1
> > > sxitwi2 at simplebus0sxiccmu_ccu_enable: 0x0000003d
> > > 
> > > iic2 at sxitwi2
> > > 
> > > Now I am stuck trying to write some code to test the driver. I 
> > > have a device on the i2c bus iic1 at address 76, a bme280 
> > > temperature, pressure and humidity sensor.
> > > I am not an accomplished c programmer and would dearly like to see 
> > > an example of using iic to read and write a device on the i2c bus.
> > > 
> > > Note: I do not see nor can create iicx or switwi devices.  
> > > 
> > 
> > Hi,
> > 
> > after you've finished what patrick@ wrote about, you might want to 
> > take a look at i/sys/dev/fdt/axp20x.c, it could very well be the 
> > simplest driver on iic-bus in tree, and consequently it does attach 
> > to
> > sxitwi* :)
> > 
> > -Artturi
> 
> So i was bored for a while; could work, but i don't have hw to test w/..
> 
> -Artturi
> 
> 
> diff --git a/sys/dev/fdt/sxiccmu_clocks.h 
> b/sys/dev/fdt/sxiccmu_clocks.h index 8b25ac42bd4..f82613e0125 100644
> --- a/sys/dev/fdt/sxiccmu_clocks.h
> +++ b/sys/dev/fdt/sxiccmu_clocks.h
> @@ -95,6 +95,10 @@ struct sxiccmu_ccu_bit sun50i_a64_gates[] = {
>  
>  #define H3_CLK_BUS_PIO               54
>  
> +#define H3_CLK_BUS_I2C0              59
> +#define H3_CLK_BUS_I2C1              60
> +#define H3_CLK_BUS_I2C2              61
> +
>  #define H3_CLK_BUS_UART0     62
>  #define H3_CLK_BUS_UART1     63
>  #define H3_CLK_BUS_UART2     64
> @@ -128,6 +132,9 @@ struct sxiccmu_ccu_bit sun8i_h3_gates[] = {
>       [H3_CLK_BUS_OHCI2] = { 0x0060, 30 },
>       [H3_CLK_BUS_OHCI3] = { 0x0060, 31 },
>       [H3_CLK_BUS_PIO]   = { 0x0068, 5 },
> +     [H3_CLK_BUS_I2C0] = { 0x006c, 0, H3_CLK_APB2 },
> +     [H3_CLK_BUS_I2C1] = { 0x006c, 1, H3_CLK_APB2 },
> +     [H3_CLK_BUS_I2C2] = { 0x006c, 2, H3_CLK_APB2 },
>       [H3_CLK_BUS_UART0] = { 0x006c, 16, H3_CLK_APB2 },
>       [H3_CLK_BUS_UART1] = { 0x006c, 17, H3_CLK_APB2 },
>       [H3_CLK_BUS_UART2] = { 0x006c, 18, H3_CLK_APB2 }, @@ -195,6 +202,10 
> @@ struct sxiccmu_ccu_bit sun50i_a64_resets[] = {
>  
>  #define H3_RST_BUS_EPHY              39
>  
> +#define H3_RST_BUS_I2C0              46
> +#define H3_RST_BUS_I2C1              47
> +#define H3_RST_BUS_I2C2              48
> +
>  struct sxiccmu_ccu_bit sun8i_h3_resets[] = {
>       [H3_RST_USB_PHY0] =  { 0x00cc, 0 },
>       [H3_RST_USB_PHY1] =  { 0x00cc, 1 },
> @@ -213,4 +224,7 @@ struct sxiccmu_ccu_bit sun8i_h3_resets[] = {
>       [H3_RST_BUS_OHCI2] = { 0x02c0, 30 },
>       [H3_RST_BUS_OHCI3] = { 0x02c0, 31 },
>       [H3_RST_BUS_EPHY]  = { 0x02c8, 2 },
> +     [H3_RST_BUS_I2C0] =  { 0x02d8, 0 },
> +     [H3_RST_BUS_I2C1] =  { 0x02d8, 1 },
> +     [H3_RST_BUS_I2C2] =  { 0x02d8, 2 },
>  };
> diff --git a/sys/dev/fdt/sxitwi.c b/sys/dev/fdt/sxitwi.c index 
> 260f6f1de57..d05f67150ed 100644
> --- a/sys/dev/fdt/sxitwi.c
> +++ b/sys/dev/fdt/sxitwi.c
> @@ -178,8 +178,9 @@ sxitwi_match(struct device *parent, void *match, 
> void
> *aux)  {
>       struct fdt_attach_args *faa = aux;
>  
> -     return (OF_is_compatible(faa->fa_node, "allwinner,sun4i-a10-i2c") |
> -         OF_is_compatible(faa->fa_node, "allwinner,sun7i-a20-i2c"));
> +     return (OF_is_compatible(faa->fa_node, "allwinner,sun4i-a10-i2c") ||
> +         OF_is_compatible(faa->fa_node, "allwinner,sun7i-a20-i2c") ||
> +         OF_is_compatible(faa->fa_node, "allwinner,sun6i-a31-i2c"));
>  }
>  
>  void
> 
> 


I just noticed i forgot to add the call in diff below.

-Artturi


diff --git a/sys/dev/fdt/sxitwi.c b/sys/dev/fdt/sxitwi.c index
d05f67150ed..d10e6a9db5e 100644
--- a/sys/dev/fdt/sxitwi.c
+++ b/sys/dev/fdt/sxitwi.c
@@ -222,6 +222,8 @@ sxitwi_attach(struct device *parent, struct device
*self, void *aux)
        /* Enable clock */
        clock_enable(faa->fa_node, NULL);
 
+       reset_deassert_all(faa->fa_node);
+
        /*
         * Set clock rate to 100kHz. From the datasheet:
         *   For 100Khz standard speed 2Wire, CLK_N=2, CLK_M=11
OpenBSD 6.2-beta (GENERIC) #2: Wed Sep 13 13:54:17 PDT 2017
    sysad...@openbsdop1.home:/usr/src/sys/arch/armv7/compile/GENERIC
real mem  = 536870912 (512MB)
avail mem = 517312512 (493MB)
mainbus0 at root: Xunlong Orange Pi One
cpu0 at mainbus0: ARM Cortex-A7 r0p5 (ARMv7)
cpu0: DC enabled IC enabled WB disabled EABT branch prediction enabled
cpu0: 32KB(32b/l,2way) I-cache, 32KB(64b/l,4way) wr-back D-cache
cortex0 at mainbus0
sxiccmu0 at mainbus0
psci0 at mainbus0
simplebus0 at mainbus0: "soc"
sxiccmu1 at simplebus0
sxipio0 at simplebus0: 94 pins
sxipio1 at simplebus0: 12 pins
sximmc0 at simplebus0
sdmmc0 at sximmc0: 4-bit, sd high-speed, mmc high-speed, dma
ehci0 at simplebus0
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00 
addr 1
ehci1 at simplebus0
usb1 at ehci1: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Generic EHCI root hub" rev 2.00/1.00 
addr 1
sxidog0 at simplebus0
com0 at simplebus0: ns16550, no working fifo
com0: console
sxitwi0 at simplebus0
iic0 at sxitwi0
sxitwi1 at simplebus0
iic1 at sxitwi1
sxitwi2 at simplebus0
iic2 at sxitwi2
ampintc0 at simplebus0 nirq 160, ncpu 4
sxirtc0 at simplebus0
gpio0 at sxipio0: 32 pins
gpio1 at sxipio0: 32 pins
gpio2 at sxipio0: 32 pins
gpio3 at sxipio0: 32 pins
gpio4 at sxipio0: 32 pins
gpio5 at sxipio0: 32 pins
gpio6 at sxipio0: 32 pins
gpio7 at sxipio1: 32 pins
agtimer0 at mainbus0: tick rate 24000 KHz
scsibus0 at sdmmc0: 2 targets, initiator 0
sd0 at scsibus0 targ 1 lun 0: <SD/MMC, SL16G, 0080> SCSI2 0/direct removable
sd0: 15193MB, 512 bytes/sector, 31116288 sectors
uhub2 at uhub1 port 1 configuration 1 interface 0 "Terminus Technology USB 2.0 
Hub" rev 2.00/1.11 addr 2
run0 at uhub2 port 2 configuration 1 interface 0 "Ralink 802.11 n WLAN" rev 
2.00/1.01 addr 3
run0: MAC/BBP RT3070 (rev 0x0201), RF RT3020 (MIMO 1T1R), address 
00:1f:cf:52:86:52
umass0 at uhub2 port 4 configuration 1 interface 0 "VIA Labs,Inc. USB3.0 SATA 
Bridge" rev 2.10/4.14 addr 4
umass0: using SCSI over Bulk-Only
scsibus1 at umass0: 2 targets, initiator 0
sd1 at scsibus1 targ 1 lun 0: <ST310005, 28AS, CC38> SCSI4 0/direct fixed 
serial.21090711000000000025
sd1: 953869MB, 512 bytes/sector, 1953525164 sectors
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
boot device: sd0
root on sd0a (1267496224926671.a) swap on sd0b dump on sd0b

Reply via email to