Welcome, Guest

Author Topic: Support i2c micro using 3.x kernel  (Read 26681 times)

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Support i2c micro using 3.x kernel
« on: September 16, 2012, 01:06:18 AM »
I'm using a OE rootfs  and this kernel git://github.com/Freescale/linux-mainline.git. 
It boots, wifi works, etc.  But no i2c support icdetect -l
returns nothing. I don't know if if it has anything to do with:
The device tree having no default mapping to fsl,imx28-i2c. 
If I load the i2c-mxs.ko module using insmod
insmod: error inserting './i2c-mxs.ko': -1 No such device

I will try and see what it is wrong..
<If anyone wants to know to I'm debugging and adding kernel modules to the SDCard.. just post this>
Updated the driver to put printks.. i2c-mxs.c and yes I think it has to do with the device tree.
modprobe i2c-mxs
[  503.790000] LINE 489
FATAL: Error inserting i2c_mxs (/lib/modules/3.6.0-rc2-09647-gddee6b1-dirty/kernel/drivers/i2c/busses/i2c-mxs.ko): No such device
root@imx233-olinuxino-micro:~#
So, looking at the code..

static const struct of_device_id mxs_i2c_dt_ids[] = {  <-- device tree info..
   { .compatible = "fsl,imx28-i2c", },
   { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxs_i2c_dt_ids);

static struct platform_driver mxs_i2c_driver = {
   .driver = {
         .name = DRIVER_NAME,
         .owner = THIS_MODULE,
         .of_match_table = mxs_i2c_dt_ids,
         },
   .remove = __devexit_p(mxs_i2c_remove),
};

static int __init mxs_i2c_init(void)
{
printk("LINE %d\n", __LINE__);
   return platform_driver_probe(&mxs_i2c_driver, mxs_i2c_probe); <-- this uses the device tree info
}



So, see if I can update the device tree info.. maybe..


« Last Edit: September 16, 2012, 01:32:18 AM by tcmichals »

davidjf2001

  • Newbie
  • *
  • Posts: 37
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #1 on: September 16, 2012, 06:07:40 AM »
I am using I2C on my OpenRD with the arch build. Kernel is 3.1.  I believe I used modprobe i2c-mc64xxx then modprobe i2c-dev.  For olinuxino i2c-imx would be needed unless you compile it in then maybe only i2c-dev is needed.  With 3.1 I2C works great on the OpenRD, So far I have only used 2.6 in the olinuxino and cannot get read words to work correctly.

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #2 on: September 16, 2012, 07:39:46 AM »
Well, finally got some of it working for the 3.6.0-rc2 kernel.  I had to update the device tree files and now..

root@imx233-olinuxino-micro:~# i2cdetect -l
i2c-0   i2c             MXS I2C adapter                         I2C adapter

I will hook up logic analyzer and see if it works..
Also, the 2.6.x i2c-mxs supports DMA, then 3.6.x does not.  So, will look into getting that moved.  Most of i2c needs are simple sensor, so DMA will not help much.  Also, changed the tree to use 400khz so, see of that works..

(hum.. I as going to add the files.. but cannot find a way to attach.. maybe to long of day...)
imx23-olinux.dts
   usbphy0: usbphy@8007c000 {
            status = "okay";
         };
         i2c0: i2c@80058000 {
            pinctrl-names = "default";
            pinctrl-0 = <&i2c0_pins_a>;
            status = "okay";

         };
imx23.dtsi (complete file)
/*
 * Copyright 2012 Freescale Semiconductor, Inc.
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/include/ "skeleton.dtsi"

/ {
   interrupt-parent = <&icoll>;

   aliases {
      gpio0 = &gpio0;
      gpio1 = &gpio1;
      gpio2 = &gpio2;
      serial0 = &auart0;
      serial1 = &auart1;
   };

   cpus {
      cpu@0 {
         compatible = "arm,arm926ejs";
      };
   };

   apb@80000000 {
      compatible = "simple-bus";
      #address-cells = <1>;
      #size-cells = <1>;
      reg = <0x80000000 0x80000>;
      ranges;

      apbh@80000000 {
         compatible = "simple-bus";
         #address-cells = <1>;
         #size-cells = <1>;
         reg = <0x80000000 0x40000>;
         ranges;

         icoll: interrupt-controller@80000000 {
            compatible = "fsl,imx23-icoll", "fsl,mxs-icoll";
            interrupt-controller;
            #interrupt-cells = <1>;
            reg = <0x80000000 0x2000>;
         };

         dma-apbh@80004000 {
            compatible = "fsl,imx23-dma-apbh";
            reg = <0x80004000 0x2000>;
         };

         ecc@80008000 {
            reg = <0x80008000 0x2000>;
            status = "disabled";
         };

         gpmi-nand@8000c000 {
            compatible = "fsl,imx23-gpmi-nand";
            #address-cells = <1>;
            #size-cells = <1>;
            reg = <0x8000c000 0x2000>, <0x8000a000 0x2000>;
            reg-names = "gpmi-nand", "bch";
            interrupts = <13>, <56>;
            interrupt-names = "gpmi-dma", "bch";
            fsl,gpmi-dma-channel = <4>;
            status = "disabled";
         };

         ssp0: ssp@80010000 {
            reg = <0x80010000 0x2000>;
            interrupts = <15 14>;
            fsl,ssp-dma-channel = <1>;
            status = "disabled";
         };

         etm@80014000 {
            reg = <0x80014000 0x2000>;
            status = "disabled";
         };

         pinctrl@80018000 {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "fsl,imx23-pinctrl", "simple-bus";
            reg = <0x80018000 0x2000>;

            gpio0: gpio@0 {
               compatible = "fsl,imx23-gpio", "fsl,mxs-gpio";
               interrupts = <16>;
               gpio-controller;
               #gpio-cells = <2>;
               interrupt-controller;
               #interrupt-cells = <2>;
            };

            gpio1: gpio@1 {
               compatible = "fsl,imx23-gpio", "fsl,mxs-gpio";
               interrupts = <17>;
               gpio-controller;
               #gpio-cells = <2>;
               interrupt-controller;
               #interrupt-cells = <2>;
            };

            gpio2: gpio@2 {
               compatible = "fsl,imx23-gpio", "fsl,mxs-gpio";
               interrupts = <18>;
               gpio-controller;
               #gpio-cells = <2>;
               interrupt-controller;
               #interrupt-cells = <2>;
            };

            duart_pins_a: duart@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x11a2 /* MX23_PAD_PWM0__DUART_RX */
                  0x11b2 /* MX23_PAD_PWM1__DUART_TX */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };

            auart0_pins_a: auart0@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x01c0 /* MX23_PAD_AUART1_RX__AUART1_RX */
                  0x01d0 /* MX23_PAD_AUART1_TX__AUART1_TX */
                  0x01a0 /* MX23_PAD_AUART1_CTS__AUART1_CTS */
                  0x01b0 /* MX23_PAD_AUART1_RTS__AUART1_RTS */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };

            i2c0_pins_a: i2c0@0 {
               reg = <0>;
               fsl,pinmux-ids = <
               0x1170 /* MX23_PAD_LCD_ENABLE__LCD_ENABLE */
               0x1180 /* MX23_PAD_LCD_HSYNC__LCD_HSYNC */
               >;
               fsl,drive-strength = <1>;
               fsl,voltage = <1>;
               fsl,pull-up = <1>;
            };

            auart0_2pins_a: auart0-2pins@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x01e2 /* MX23_PAD_I2C_SCL__AUART1_TX */
                  0x01f2 /* MX23_PAD_I2C_SDA__AUART1_RX */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };

            gpmi_pins_a: gpmi-nand@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x0000 /* MX23_PAD_GPMI_D00__GPMI_D00 */
                  0x0010 /* MX23_PAD_GPMI_D01__GPMI_D01 */
                  0x0020 /* MX23_PAD_GPMI_D02__GPMI_D02 */
                  0x0030 /* MX23_PAD_GPMI_D03__GPMI_D03 */
                  0x0040 /* MX23_PAD_GPMI_D04__GPMI_D04 */
                  0x0050 /* MX23_PAD_GPMI_D05__GPMI_D05 */
                  0x0060 /* MX23_PAD_GPMI_D06__GPMI_D06 */
                  0x0070 /* MX23_PAD_GPMI_D07__GPMI_D07 */
                  0x0100 /* MX23_PAD_GPMI_CLE__GPMI_CLE */
                  0x0110 /* MX23_PAD_GPMI_ALE__GPMI_ALE */
                  0x0130 /* MX23_PAD_GPMI_RDY0__GPMI_RDY0 */
                  0x0140 /* MX23_PAD_GPMI_RDY1__GPMI_RDY1 */
                  0x0170 /* MX23_PAD_GPMI_WPN__GPMI_WPN */
                  0x0180 /* MX23_PAD_GPMI_WRN__GPMI_WRN */
                  0x0190 /* MX23_PAD_GPMI_RDN__GPMI_RDN */
                  0x21b0 /* MX23_PAD_GPMI_CE1N__GPMI_CE1N */
                  0x21c0 /* MX23_PAD_GPMI_CE0N__GPMI_CE0N   */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };

            gpmi_pins_fixup: gpmi-pins-fixup {
               fsl,pinmux-ids = <
                  0x0170 /* MX23_PAD_GPMI_WPN__GPMI_WPN */
                  0x0180 /* MX23_PAD_GPMI_WRN__GPMI_WRN */
                  0x0190 /* MX23_PAD_GPMI_RDN__GPMI_RDN */
               >;
               fsl,drive-strength = <2>;
            };

            mmc0_4bit_pins_a: mmc0-4bit@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x2020 /* MX23_PAD_SSP1_DATA0__SSP1_DATA0 */
                  0x2030 /* MX23_PAD_SSP1_DATA1__SSP1_DATA1 */
                  0x2040 /* MX23_PAD_SSP1_DATA2__SSP1_DATA2 */
                  0x2050 /* MX23_PAD_SSP1_DATA3__SSP1_DATA3 */
                  0x2000 /* MX23_PAD_SSP1_CMD__SSP1_CMD */
                  0x2010 /* MX23_PAD_SSP1_DETECT__SSP1_DETECT */
                  0x2060 /* MX23_PAD_SSP1_SCK__SSP1_SCK */
               >;
               fsl,drive-strength = <1>;
               fsl,voltage = <1>;
               fsl,pull-up = <1>;
            };

            mmc0_8bit_pins_a: mmc0-8bit@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x2020 /* MX23_PAD_SSP1_DATA0__SSP1_DATA0 */
                  0x2030 /* MX23_PAD_SSP1_DATA1__SSP1_DATA1 */
                  0x2040 /* MX23_PAD_SSP1_DATA2__SSP1_DATA2 */
                  0x2050 /* MX23_PAD_SSP1_DATA3__SSP1_DATA3 */
                  0x0082 /* MX23_PAD_GPMI_D08__SSP1_DATA4 */
                  0x0092 /* MX23_PAD_GPMI_D09__SSP1_DATA5 */
                  0x00a2 /* MX23_PAD_GPMI_D10__SSP1_DATA6 */
                  0x00b2 /* MX23_PAD_GPMI_D11__SSP1_DATA7 */
                  0x2000 /* MX23_PAD_SSP1_CMD__SSP1_CMD */
                  0x2010 /* MX23_PAD_SSP1_DETECT__SSP1_DETECT */
                  0x2060 /* MX23_PAD_SSP1_SCK__SSP1_SCK */
               >;
               fsl,drive-strength = <1>;
               fsl,voltage = <1>;
               fsl,pull-up = <1>;
            };

            mmc0_pins_fixup: mmc0-pins-fixup {
               fsl,pinmux-ids = <
                  0x2010 /* MX23_PAD_SSP1_DETECT__SSP1_DETECT */
                  0x2060 /* MX23_PAD_SSP1_SCK__SSP1_SCK */
               >;
               fsl,pull-up = <0>;
            };

            pwm2_pins_a: pwm2@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x11c0 /* MX23_PAD_PWM2__PWM2 */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };

            lcdif_24bit_pins_a: lcdif-24bit@0 {
               reg = <0>;
               fsl,pinmux-ids = <
                  0x1000 /* MX23_PAD_LCD_D00__LCD_D0 */
                  0x1010 /* MX23_PAD_LCD_D01__LCD_D1 */
                  0x1020 /* MX23_PAD_LCD_D02__LCD_D2 */
                  0x1030 /* MX23_PAD_LCD_D03__LCD_D3 */
                  0x1040 /* MX23_PAD_LCD_D04__LCD_D4 */
                  0x1050 /* MX23_PAD_LCD_D05__LCD_D5 */
                  0x1060 /* MX23_PAD_LCD_D06__LCD_D6 */
                  0x1070 /* MX23_PAD_LCD_D07__LCD_D7 */
                  0x1080 /* MX23_PAD_LCD_D08__LCD_D8 */
                  0x1090 /* MX23_PAD_LCD_D09__LCD_D9 */
                  0x10a0 /* MX23_PAD_LCD_D10__LCD_D10 */
                  0x10b0 /* MX23_PAD_LCD_D11__LCD_D11 */
                  0x10c0 /* MX23_PAD_LCD_D12__LCD_D12 */
                  0x10d0 /* MX23_PAD_LCD_D13__LCD_D13 */
                  0x10e0 /* MX23_PAD_LCD_D14__LCD_D14 */
                  0x10f0 /* MX23_PAD_LCD_D15__LCD_D15 */
                  0x1100 /* MX23_PAD_LCD_D16__LCD_D16 */
                  0x1110 /* MX23_PAD_LCD_D17__LCD_D17 */
                  0x0081 /* MX23_PAD_GPMI_D08__LCD_D18 */
                  0x0091 /* MX23_PAD_GPMI_D09__LCD_D19 */
                  0x00a1 /* MX23_PAD_GPMI_D10__LCD_D20 */
                  0x00b1 /* MX23_PAD_GPMI_D11__LCD_D21 */
                  0x00c1 /* MX23_PAD_GPMI_D12__LCD_D22 */
                  0x00d1 /* MX23_PAD_GPMI_D13__LCD_D23 */
                  0x1160 /* MX23_PAD_LCD_DOTCK__LCD_DOTCK */
                  0x1190 /* MX23_PAD_LCD_VSYNC__LCD_VSYNC */
               >;
               fsl,drive-strength = <0>;
               fsl,voltage = <1>;
               fsl,pull-up = <0>;
            };
         };

         digctl@8001c000 {
            reg = <0x8001c000 2000>;
            status = "disabled";
         };

         emi@80020000 {
            reg = <0x80020000 0x2000>;
            status = "disabled";
         };

         dma-apbx@80024000 {
            compatible = "fsl,imx23-dma-apbx";
            reg = <0x80024000 0x2000>;
         };

         dcp@80028000 {
            reg = <0x80028000 0x2000>;
            status = "disabled";
         };

         pxp@8002a000 {
            reg = <0x8002a000 0x2000>;
            status = "disabled";
         };

         ocotp@8002c000 {
            reg = <0x8002c000 0x2000>;
            status = "disabled";
         };

         axi-ahb@8002e000 {
            reg = <0x8002e000 0x2000>;
            status = "disabled";
         };

         lcdif@80030000 {
            compatible = "fsl,imx23-lcdif";
            reg = <0x80030000 2000>;
            interrupts = <46 45>;
            status = "disabled";
         };

         ssp1: ssp@80034000 {
            reg = <0x80034000 0x2000>;
            interrupts = <2 20>;
            fsl,ssp-dma-channel = <2>;
            status = "disabled";
         };

         tvenc@80038000 {
            reg = <0x80038000 0x2000>;
            status = "disabled";
         };
                };

      apbx@80040000 {
         compatible = "simple-bus";
         #address-cells = <1>;
         #size-cells = <1>;
         reg = <0x80040000 0x40000>;
         ranges;

         clkctl@80040000 {
            reg = <0x80040000 0x2000>;
            status = "disabled";
         };

         saif0: saif@80042000 {
            reg = <0x80042000 0x2000>;
            status = "disabled";
         };

         power@80044000 {
            reg = <0x80044000 0x2000>;
            status = "disabled";
         };

         saif1: saif@80046000 {
            reg = <0x80046000 0x2000>;
            status = "disabled";
         };

         audio-out@80048000 {
            reg = <0x80048000 0x2000>;
            status = "disabled";
         };

         audio-in@8004c000 {
            reg = <0x8004c000 0x2000>;
            status = "disabled";
         };

         lradc@80050000 {
            reg = <0x80050000 0x2000>;
            status = "disabled";
         };

         spdif@80054000 {
            reg = <0x80054000 2000>;
            status = "disabled";
         };

         i2c0: i2c@80058000 {
            compatible = "fsl,imx28-i2c";
            reg = <0x80058000 0x2000>;
            interrupts = <26 27>;
            clock-frequency = <400000>;
            status = "disabled";
         };

         rtc@8005c000 {
            compatible = "fsl,imx23-rtc", "fsl,stmp3xxx-rtc";
            reg = <0x8005c000 0x2000>;
            interrupts = <22>;
         };

         pwm: pwm@80064000 {
            compatible = "fsl,imx23-pwm";
            reg = <0x80064000 0x2000>;
            #pwm-cells = <2>;
            fsl,pwm-number = <5>;
            status = "disabled";
         };

         timrot@80068000 {
            reg = <0x80068000 0x2000>;
            status = "disabled";
         };

         auart0: serial@8006c000 {
            compatible = "fsl,imx23-auart";
            reg = <0x8006c000 0x2000>;
            interrupts = <24 25 23>;
            status = "disabled";
         };

         auart1: serial@8006e000 {
            compatible = "fsl,imx23-auart";
            reg = <0x8006e000 0x2000>;
            interrupts = <59 60 58>;
            status = "disabled";
         };

         duart: serial@80070000 {
            compatible = "arm,pl011", "arm,primecell";
            reg = <0x80070000 0x2000>;
            interrupts = <0>;
            status = "disabled";
         };

         usbphy0: usbphy@8007c000 {
            compatible = "fsl,imx23-usbphy";
            reg = <0x8007c000 0x2000>;
            status = "disabled";
         };
      };
   };

   ahb@80080000 {
      compatible = "simple-bus";
      #address-cells = <1>;
      #size-cells = <1>;
      reg = <0x80080000 0x80000>;
      ranges;

      usb0: usb@80080000 {
         compatible = "fsl,imx23-usb", "fsl,imx27-usb";
         reg = <0x80080000 0x40000>;
         interrupts = <11>;
         fsl,usbphy = <&usbphy0>;
         status = "disabled";
      };
   };
};

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #3 on: September 17, 2012, 12:07:31 AM »
The pins are not correct..
i2c0_pins_a: i2c0@0 {
   reg = <0>;
   fsl,pinmux-ids = <
         0x1170 /* MX23_PAD_LCD_ENABLE__LCD_ENABLE */
         0x1180 /* MX23_PAD_LCD_HSYNC__LCD_HSYNC */
         >;
         fsl,drive-strength = <1>;
         fsl,voltage = <1>;
         fsl,pull-up = <1>;
   };
I'm trying to figure out the pin mapping, the issue is taking the LCD_ENABLE and LCD_HYSNC and moving this to i2c mode 1.

earny

  • Newbie
  • *
  • Posts: 3
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #4 on: September 17, 2012, 02:27:03 AM »
Hint: dma support:

https://patchwork.kernel.org/patch/1369781/

Tried on maxi and micro, scope shows always high om SDA/SCL

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #5 on: September 17, 2012, 04:02:17 PM »
I guess the DMA patch is in the next Linux tree or still in patches, so, back to figuring out the pin mapping on the device tree.  I think this pin mapping is the last remaining issue with 3.X for I2C to work. I think this is what is causing your issue also.

Niii

  • Newbie
  • *
  • Posts: 40
  • Karma: +1/-0
Re: Support i2c micro using 3.x kernel
« Reply #6 on: October 01, 2012, 08:45:43 PM »
Hi,

There is a working solution for have i2c on 3.6 kernel ?
I tested with adding i2c diff to dts file, and I applied DMA patch.

I've got an i2c device :
Code: [Select]
root@micro:~# i2cdetect -l
i2c-0 i2c        MXS I2C adapter                  I2C adapter

But when I scan, I've got that error (maybe missing support for smbus, who are not available without ACPI) :
Code: [Select]
root@micro:~# i2cdetect 0
Error: Can't use SMBus Quick Write command on this bus (ISA bus?)

With -r option, scan works but detects nothing.
I've make an error, or I've missing something ? (another things than bad wiring :]).

Regards

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #7 on: October 02, 2012, 01:43:48 AM »
I'm going to try 3.6, later this week.  Yes. I'm seeing the same thing, I've put a logic analyzer, and the data is crap. Load 2.6.35.3 it looks OK.  Between getting panics, posted in another forum, this is becoming a long debug task. 

If you can please post your device tree, see if we did the same thing.. there is some additional fixes in the i2c in 3.6 for the i2c-mxs.c driver.

Niii

  • Newbie
  • *
  • Posts: 40
  • Karma: +1/-0
Re: Support i2c micro using 3.x kernel
« Reply #8 on: October 02, 2012, 11:07:39 AM »
What do you mean by "device tree" ?

tcmichals

  • Newbie
  • *
  • Posts: 33
  • Karma: +0/-0
Re: Support i2c micro using 3.x kernel
« Reply #9 on: October 02, 2012, 04:20:43 PM »
The device tree files: (imx23.dtsi  imx23-olinuxino.dts

I have no idea how to post a file in this forum.. guess have to start github or something else.  I'm using buildroot and making at patch file for all of this and the usb phy.  Looking at the current tree, to me the debug port is not assigned, auart0 only the dual-uart is enabled.  Maybe I'm off base with this..

But here are my basic changes..
diff -uNr linux-3.6.tcm/arch/arm/boot/dts/imx23.dtsi linux-3.6/arch/arm/boot/dts/imx23.dtsi
--- linux-3.6.tcm/arch/arm/boot/dts/imx23.dtsi   2012-10-01 13:31:32.909159348 -0500
+++ linux-3.6/arch/arm/boot/dts/imx23.dtsi   2012-09-30 18:47:46.000000000 -0500
@@ -257,26 +257,14 @@
                   0x00c1 /* MX23_PAD_GPMI_D12__LCD_D22 */
                   0x00d1 /* MX23_PAD_GPMI_D13__LCD_D23 */
                   0x1160 /* MX23_PAD_LCD_DOTCK__LCD_DOTCK */
-               //   0x1170 /* MX23_PAD_LCD_ENABLE__LCD_ENABLE */
-               //   0x1180 /* MX23_PAD_LCD_HSYNC__LCD_HSYNC */
+                  0x1170 /* MX23_PAD_LCD_ENABLE__LCD_ENABLE */
+                  0x1180 /* MX23_PAD_LCD_HSYNC__LCD_HSYNC */
                   0x1190 /* MX23_PAD_LCD_VSYNC__LCD_VSYNC */
                >;
                fsl,drive-strength = <0>;
                fsl,voltage = <1>;
                fsl,pull-up = <0>;
             };
-
-            i2c0_pins_a: i2c0@0 {
-               reg = <0>;
-               fsl,pinmux-ids = <
-               0x1170 /* MX23_PAD_LCD_ENABLE__LCD_ENABLE */
-               0x1180 /* MX23_PAD_LCD_HSYNC__LCD_HSYNC */
-               >;
-               fsl,drive-strength = <1>;
-               fsl,voltage = <1>;
-               fsl,pull-up = <1>;
-            }
-
          };
 
          digctl@8001c000 {
@@ -383,11 +371,6 @@
 
          i2c@80058000 {
             reg = <0x80058000 0x2000>;
-            #address-cells = <1>;
-            #size-cells = <0>;
-            compatible = "fsl,imx28-i2c";
-            interrupts = <27 26>;
-            clock-frequency = <100000>;
             status = "disabled";
          };
 
diff -uNr linux-3.6.tcm/arch/arm/boot/dts/imx23-olinuxino.dts linux-3.6/arch/arm/boot/dts/imx23-olinuxino.dts
--- linux-3.6.tcm/arch/arm/boot/dts/imx23-olinuxino.dts   2012-10-01 13:31:37.141159336 -0500
+++ linux-3.6/arch/arm/boot/dts/imx23-olinuxino.dts   2012-09-30 18:47:46.000000000 -0500
@@ -39,24 +39,6 @@
             pinctrl-0 = <&duart_pins_a>;
             status = "okay";
          };
-
-         auart0: serial@8006c000
-         {
-              pinctrl-names = "default";
-            pinctrl-0 = <&auart0_2pins_a>;
-              status = "okay";
-         };
-
-         i2c0: i2c@80058000 {
-            pinctrl-names = "default";
-            pinctrl-0 = <&i2c0_pins_a>;
-            status = "okay";
-
-         };
-
-         usbphy@8007c000 {
-            status = "okay";
-         };
       };
    };
 };

Fadil Berisha

  • Full Member
  • ***
  • Posts: 124
  • Karma: +7/-0
Re: Support i2c micro using 3.x kernel
« Reply #10 on: October 02, 2012, 06:03:48 PM »
File imx23.dtsi is processors device tree file defining i.MX23 processor, and  imx23-olinuxino.dts is board device tree file defining olinuxino board resources.

- Processors device tree file  is provided by chip manufacturer - in this case Freescale. By default, no need to modify processors device tree file, except if something missing there.
- Board device tree file should be provided by board manufacturer - in this case Olimex. Initial kernel 3.x support is done by Freescale kernel developers.

Both files are not complete so i2c does not work. Since i2c interface is present in three different pin combinations, need 1st to define them in  imx23.dtsi and based on pins used by olinuxino to define them in imx23-olinuxino.dts.

Fadil Berisha


 


olimex

  • Administrator
  • Hero Member
  • *****
  • Posts: 810
  • Karma: +22/-3
Re: Support i2c micro using 3.x kernel
« Reply #11 on: October 02, 2012, 07:24:27 PM »
Hi Fadil

I'm not sure anybody here at Olimex have the necessary knowledge to add these manufacturer dts files, but I do not understand why in 2.6.x we had everything like audio, video encoder, i2c etc working and now in 3.x they are all broken :) is't there easy way to copy these from the early kernel and just "add" them to the new one?

Fadil Berisha

  • Full Member
  • ***
  • Posts: 124
  • Karma: +7/-0
Re: Support i2c micro using 3.x kernel
« Reply #12 on: October 02, 2012, 09:48:17 PM »
Quote
in 2.6.x we had everything like audio, video encoder, i2c etc working and now in 3.x they are all broken

Needed all drivers to adapt for device tree support. Most of them are already  in kernel 3.x, including usb suport, spi, i2c, lradc etc. I don't have info if somebody working on video and audio.

I did some work on spi and i2c patches for board device tree file - imx23-olinuxino.dts. I will post in this forum as soon I get done some breakout boards for hardware verification. 
 
Regards
Fadil Berisha

Niii

  • Newbie
  • *
  • Posts: 40
  • Karma: +1/-0
Re: Support i2c micro using 3.x kernel
« Reply #13 on: October 02, 2012, 10:01:15 PM »
>I will post in this forum as soon I get done some breakout boards for hardware verification.
Or simply post your dts file if you want some tests :).

Fadil Berisha

  • Full Member
  • ***
  • Posts: 124
  • Karma: +7/-0
Re: Support i2c micro using 3.x kernel
« Reply #14 on: October 03, 2012, 12:00:08 AM »
Quote
Or simply post your dts file if you want some tests :).

No problem. Here is patch for i2c, both for imx23.dtsi and imx23-olinuxino.dts:

http://pastebin.com/HrgB1hAW

Patch apply to linux-next-20120914. As I stated before, i2c is present in three pin combinations (see part for imx23.dtsi). In olinuxino board, i2c interface is present in UEXT and extension connector. Patch imx23-olinuxino.dts is refered to chip  sgtl5000 and 2-Wire Serial EEPROM 24c32. If you don't have handy those breakout board, change code accordingly with your chip.

Please, post your finding.
Regards
Fadil Berisha