Other Parts Discussed in Thread: PCF8575
Tool/software:
I need to drive some outputs which are connected on gpio-expander. i have PCF8575 and MCP23017 which works pretty well when linux is booted. i need to have ability to drive some of these pins on gpio-expander at bootup.
I am using following u-boot version
U-Boot SPL 2023.04-dirty (Oct 02 2024 - 17:58:22 +0530) Trying to boot from MMC1 U-Boot 2023.04-dirty (Oct 02 2024 - 17:58:22 +0530) CPU : AM335X-GP rev 2.1 Model: TI AM335x BeagleBone Black-pcf-mcp-r1 DRAM: 512 MiB Core: 163 devices, 18 uclasses, devicetree: separate WDT: Started wdt@44e35000 with servicing every 1000ms (60s timeout) NAND: 0 MiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... <ethaddr> not set. Validating first E-fuse MAC Net: eth2: ethernet@4a100000, eth3: usb_ether Hit any key to stop autoboot: 0
I have updated the device tree as below
i2c1_pins: pinmux_i2c1_pins { pinctrl-single,pins = < AM33XX_PADCONF(AM335X_PIN_SPI0_CS0, PIN_INPUT_PULLUP, MUX_MODE2) /*A16 - I2C1_SCLK*/ AM33XX_PADCONF(AM335X_PIN_SPI0_D1, PIN_INPUT_PULLUP, MUX_MODE2) /*B16 - SPI1_SDA*/ >; }; &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&i2c1_pins>; status = "okay"; clock-frequency = <100000>; gpio@27 { //compatible = "microchip,mcp23017"; compatible = "microchip,mcp23017"; gpio-controller; #gpio-cells = <2>; reg = <0x27>; }; pcf8575: gpio@20 { compatible = "nxp,pcf8575"; reg = <0x20>; gpio-controller; #gpio-cells = <2>; }; };
I have enabled pcf8575 and mcp23017 from menuconfig
# CONFIG_HSDK_CREG_GPIO is not set # CONFIG_KIRKWOOD_GPIO is not set # CONFIG_LPC32XX_GPIO is not set # CONFIG_MAX7320_GPIO is not set CONFIG_MCP230XX_GPIO=y # CONFIG_MSM_GPIO is not set # CONFIG_MXC_GPIO is not set # CONFIG_MXS_GPIO is not set # CONFIG_NPCM_GPIO is not set CONFIG_OMAP_GPIO=y # CONFIG_CMD_PCA953X is not set CONFIG_PCF8575_GPIO=y
when i probe i2c1 i expect it detects mcp and pcf which are at address 0x27 and 0x20, but i keep getting probe fail, please find what i see as below
=> i2c dev 1 Setting bus to 1 => i2c probe Valid chip addresses:Timed out in wait_for_event: status=0000 Check if pads/pull-ups of bus are properly configured Timed out in wait_for_event: status=0000 Check if pads/pull-ups of bus are properly configured Timed out in wait_for_event: status=0000
the => dm tree commands shows
=> dm tree Class Index Probed Driver Name ----------------------------------------------------------- root 0 [ + ] root_driver root_driver rsa_mod_ex 0 [ ] mod_exp_sw |-- mod_exp_sw simple_bus 0 [ + ] simple_bus |-- ocp simple_bus 1 [ + ] simple_bus | |-- l4_wkup@44c00000 simple_bus 2 [ ] simple_bus | | |-- segment@0 simple_bus 3 [ ] simple_bus | | |-- segment@100000 simple_bus 4 [ + ] simple_bus | | `-- segment@200000 simple_bus 5 [ + ] ti_sysc | | |-- target-module@0 simple_bus 6 [ + ] simple_bus | | | `-- prcm@0 simple_bus 7 [ ] simple_bus | | | |-- clocks clk 0 [ ] fixed_clock | | | | |-- clock-clk-32768 clk 1 [ ] fixed_clock | | | | |-- clock-clk-rc32k clk 2 [ ] fixed_clock | | | | |-- clock-virt-19200000 clk 3 [ ] fixed_clock | | | | |-- clock-virt-24000000 clk 4 [ ] fixed_clock | | | | |-- clock-virt-25000000 clk 5 [ ] fixed_clock | | | | |-- clock-virt-26000000 clk 6 [ ] fixed_clock | | | | |-- clock-tclkin clk 7 [ ] fixed_factor_clock | | | | |-- clock-dpll-ddr-m2-div2 clk 8 [ ] fixed_factor_clock | | | | |-- clock-dpll-per-m2-div4-wkupdm clk 9 [ ] fixed_factor_clock | | | | |-- clock-dpll-per-m2-div4 clk 10 [ ] fixed_factor_clock | | | | |-- clock-clk-24mhz clk 11 [ ] fixed_factor_clock | | | | |-- clock-clkdiv32k clk 12 [ ] fixed_factor_clock | | | | |-- clock-l3-gclk clk 13 [ ] fixed_factor_clock | | | | |-- clock-dpll-core-m4-div2 clk 14 [ ] fixed_factor_clock | | | | |-- clock-l4-rtc-gclk clk 15 [ ] fixed_factor_clock | | | | |-- clock-l4hs-gclk clk 16 [ ] fixed_factor_clock | | | | |-- clock-l3s-gclk clk 17 [ ] fixed_factor_clock | | | | |-- clock-l4fw-gclk clk 18 [ ] fixed_factor_clock | | | | |-- clock-l4ls-gclk clk 19 [ ] fixed_factor_clock | | | | |-- clock-sysclk-div clk 20 [ ] fixed_factor_clock | | | | |-- clock-cpsw-125mhz-gclk clk 21 [ ] fixed_factor_clock | | | | `-- clock-mmc simple_bus 8 [ ] ti_omap4_cm | | | |-- clock@0 clk 22 [ ] ti_ctrl_clk | | | | |-- clock@38 clk 23 [ ] ti_ctrl_clk | | | | |-- clock@1c clk 24 [ ] ti_ctrl_clk | | | | |-- clock@24 clk 25 [ ] ti_ctrl_clk | | | | |-- clock@120 clk 26 [ ] ti_ctrl_clk | | | | |-- clock@e8 clk 27 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 28 [ ] ti_ctrl_clk | | | | |-- clock@18 clk 29 [ ] ti_ctrl_clk | | | | |-- clock@14c clk 30 [ ] ti_ctrl_clk | | | | |-- clock@38 clk 31 [ ] ti_ctrl_clk | | | | |-- clock@1c clk 32 [ ] ti_ctrl_clk | | | | |-- clock@24 clk 33 [ ] ti_ctrl_clk | | | | |-- clock@120 clk 34 [ ] ti_ctrl_clk | | | | |-- clock@e8 clk 35 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 36 [ ] ti_ctrl_clk | | | | |-- clock@18 clk 37 [ ] ti_ctrl_clk | | | | `-- clock@14c simple_bus 9 [ + ] ti_omap4_cm | | | |-- clock@400 clk 38 [ + ] ti_ctrl_clk | | | | |-- clock@0 clk 39 [ ] ti_ctrl_clk | | | | |-- clock@14 clk 40 [ ] ti_ctrl_clk | | | | |-- clock@b0 clk 41 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 42 [ ] ti_ctrl_clk | | | | |-- clock@14 clk 43 [ ] ti_ctrl_clk | | | | `-- clock@b0 simple_bus 10 [ ] ti_omap4_cm | | | |-- clock@600 clk 44 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 45 [ ] ti_ctrl_clk | | | | `-- clock@0 simple_bus 11 [ ] ti_omap4_cm | | | |-- clock@800 clk 46 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 47 [ ] ti_ctrl_clk | | | | `-- clock@0 simple_bus 12 [ ] ti_omap4_cm | | | |-- clock@900 clk 48 [ ] ti_ctrl_clk | | | | |-- clock@0 clk 49 [ ] ti_ctrl_clk | | | | `-- clock@0 simple_bus 13 [ ] ti_omap4_cm | | | `-- clock@a00 clk 50 [ ] ti_ctrl_clk | | | |-- clock@0 clk 51 [ ] ti_ctrl_clk | | | `-- clock@0 simple_bus 14 [ + ] ti_sysc | | |-- target-module@7000 gpio 0 [ + ] gpio_omap | | | `-- gpio@0 simple_bus 15 [ + ] ti_sysc | | |-- target-module@9000 serial 0 [ + ] omap_serial | | | `-- serial@0 simple_bus 16 [ ] ti_sysc | | |-- target-module@b000 simple_bus 17 [ ] ti_sysc | | |-- target-module@d000 simple_bus 18 [ ] ti_sysc | | |-- target-module@10000 simple_bus 19 [ ] simple_bus | | | `-- scm@0 simple_bus 20 [ ] simple_bus | | | `-- scm_conf@0 simple_bus 21 [ ] simple_bus | | | `-- clocks clk 52 [ ] fixed_factor_clock | | | |-- clock-adc-tsc-fck clk 53 [ ] fixed_factor_clock | | | |-- clock-dcan0-fck clk 54 [ ] fixed_factor_clock | | | |-- clock-dcan1-fck clk 55 [ ] fixed_factor_clock | | | |-- clock-mcasp0-fck clk 56 [ ] fixed_factor_clock | | | |-- clock-mcasp1-fck clk 57 [ ] fixed_factor_clock | | | |-- clock-smartreflex0-fck clk 58 [ ] fixed_factor_clock | | | |-- clock-smartreflex1-fck clk 59 [ ] fixed_factor_clock | | | |-- clock-sha0-fck clk 60 [ ] fixed_factor_clock | | | |-- clock-aes0-fck clk 61 [ ] fixed_factor_clock | | | `-- clock-rng-fck simple_bus 22 [ ] ti_sysc | | |-- target-module@35000 simple_bus 23 [ ] ti_sysc | | `-- target-module@3e000 simple_bus 24 [ ] simple_bus | |-- interconnect@48000000 simple_bus 25 [ ] simple_bus | | |-- segment@0 simple_bus 26 [ ] ti_sysc | | | |-- target-module@22000 simple_bus 27 [ ] ti_sysc | | | |-- target-module@24000 simple_bus 28 [ ] ti_sysc | | | |-- target-module@2a000 simple_bus 29 [ ] ti_sysc | | | |-- target-module@30000 simple_bus 30 [ ] ti_sysc | | | |-- target-module@38000 simple_bus 31 [ ] ti_sysc | | | |-- target-module@3c000 simple_bus 32 [ ] ti_sysc | | | |-- target-module@4c000 gpio 1 [ ] gpio_omap | | | | `-- gpio@0 simple_bus 33 [ ] ti_sysc | | | |-- target-module@60000 simple_bus 34 [ ] ti_sysc | | | |-- target-module@80000 simple_bus 35 [ ] ti_sysc | | | |-- target-module@c8000 simple_bus 36 [ ] ti_sysc | | | `-- target-module@ca000 simple_bus 37 [ ] simple_bus | | |-- segment@100000 simple_bus 38 [ ] ti_sysc | | | |-- target-module@9c000 simple_bus 39 [ ] ti_sysc | | | |-- target-module@a0000 simple_bus 40 [ ] ti_sysc | | | |-- target-module@a6000 simple_bus 41 [ ] ti_sysc | | | |-- target-module@a8000 simple_bus 42 [ ] ti_sysc | | | |-- target-module@aa000 simple_bus 43 [ ] ti_sysc | | | |-- target-module@ac000 gpio 2 [ ] gpio_omap | | | | `-- gpio@0 simple_bus 44 [ ] ti_sysc | | | |-- target-module@ae000 gpio 3 [ ] gpio_omap | | | | `-- gpio@0 simple_bus 45 [ ] ti_sysc | | | |-- target-module@cc000 simple_bus 46 [ ] ti_sysc | | | |-- target-module@d0000 simple_bus 47 [ ] ti_sysc | | | `-- target-module@d8000 simple_bus 48 [ ] simple_bus | | |-- segment@200000 simple_bus 49 [ ] simple_bus | | `-- segment@300000 simple_bus 50 [ ] ti_sysc | | |-- target-module@0 simple_bus 51 [ ] ti_sysc | | |-- target-module@2000 simple_bus 52 [ ] ti_sysc | | |-- target-module@4000 simple_bus 53 [ ] ti_sysc | | |-- target-module@e000 simple_bus 54 [ ] ti_sysc | | `-- target-module@10000 simple_bus 55 [ ] simple_bus | |-- interconnect@47c00000 simple_bus 56 [ ] simple_bus | | `-- segment@0 simple_bus 57 [ ] simple_bus | |-- interconnect@4a000000 simple_bus 58 [ ] simple_bus | | `-- segment@0 simple_bus 59 [ ] ti_sysc | | `-- target-module@100000 simple_bus 60 [ ] simple_bus | |-- interconnect@4b140000 simple_bus 61 [ ] simple_bus | | `-- segment@0 simple_bus 62 [ ] ti_sysc | |-- target-module@49000000 simple_bus 63 [ ] ti_sysc | |-- target-module@49800000 simple_bus 64 [ ] ti_sysc | |-- target-module@49900000 simple_bus 65 [ ] ti_sysc | |-- target-module@49a00000 simple_bus 66 [ ] ti_sysc | |-- target-module@47810000 i2c 0 [ ] i2c_omap | |-- i2c@44e0b000 pmic 0 [ ] tps65217 pmic | | `-- tps@24 i2c 1 [ + ] i2c_omap | |-- i2c@4802a000 gpio 4 [ ] mcp230xx | | |-- gpio@27 gpio 5 [ ] gpio_pcf8575 | | `-- gpio@20 i2c 2 [ ] i2c_omap | |-- i2c@4819c000 mmc 0 [ + ] omap_hsmmc | |-- mmc@48060000 blk 0 [ + ] mmc_blk | | |-- mmc@48060000.blk partition 0 [ + ] blk_partition | | | |-- mmc@48060000.blk:1 partition 1 [ + ] blk_partition | | | `-- mmc@48060000.blk:2 bootdev 0 [ ] mmc_bootdev | | `-- mmc@48060000.bootdev mmc 1 [ + ] omap_hsmmc | |-- mmc@481d8000 blk 1 [ ] mmc_blk | | |-- mmc@481d8000.blk bootdev 1 [ ] mmc_bootdev | | `-- mmc@481d8000.bootdev watchdog 0 [ + ] omap3_wdt | |-- wdt@44e35000 misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000 usb 0 [ + ] ti-musb-peripheral | | |-- usb@47401000 ethernet 1 [ + ] usb_ether | | | `-- usb_ether bootdev 3 [ ] eth_bootdev | | | `-- usb_ether.bootdev usb 0 [ ] ti-musb-host | | `-- usb@47401800 ethernet 0 [ + ] eth_cpsw | |-- ethernet@4a100000 bootdev 2 [ ] eth_bootdev | | `-- ethernet@4a100000.bootdev simple_bus 67 [ ] ti_sysc | |-- target-module@53100000 simple_bus 68 [ ] ti_sysc | |-- target-module@53500000 simple_bus 69 [ ] ti_sysc | `-- target-module@56000000 clk 62 [ ] fixed_clock |-- clk_mcasp0_fixed bootstd 0 [ ] bootstd_drv |-- bootstd bootmeth 0 [ ] bootmeth_distro | |-- distro bootmeth 1 [ ] bootmeth_efi | |-- efi bootmeth 2 [ ] bootmeth_pxe | |-- pxe bootmeth 3 [ ] vbe_simple | `-- vbe_simple timer 0 [ + ] omap_timer `-- timer@0
I have read the registers to check if i2c1 clock is enabled and it is, plus i have tried with different versions of u-boot (2020.1 and with that update dtsi to have 0x158 and 0x15C as address for i2c1 pins)
Is there something i am missing, i assumed this would be seamless but seems something i dont follow.
on same setup i2c dev 0 and i2c probe gives me right data
=> i2c dev 0 Setting bus to 0 => i2c probe Valid chip addresses: 24 34 50
would appreciate some help here
-maheshG