This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM5728: OV10635 camera I2C issue

Part Number: AM5728

Tool/software: Linux

Hi All,

As we wanted to connect Omnivision OV10635 camera to  AM572x GP EVM.

We have done all necessary changes in mux_data.h ( to pin mux i2c 5 scl/sda) and also done changes in device tree so that the available OV10635 driver code can be loaded as v4l2 subdevice(VIP).

ti/board-support/linux-4.4.32+gitAUTOINC+adde2ca9f8-gadde2ca9f8/drivers/media/i2c/ov1063x.c

But the driver fails at the probe stage itself at very first call of i2c call of register read.

ov1063x_video_probe--> ov1063x_set_regs-->ov1063x_reg_write--> i2c_transfer.

Please let me know any specific changes/patches needed in the provided ov1063x driver code.

Also is this could be issue because of difference between Omnivision SCCB vs I2c protocol ??

Regards

Pallab Sarkar

  • Hi,

    Are you sure that your I2C is configured correctly? Do you see any signaling on the I2C lines?
  • HI Biser,

    Yes i2c is configured properly and verified on signal analyzer.
    Attached signal analyzer output .
    Also confirmed the electrical properties(like oscillator etc) of OV10635 after connection. Electrically the connection is established.

    Regards
    Pallab
  • We need more information before being able to help. I assume you are connecting a custom camera board to J9 of the AM572x GP EVM LCD module. If so, can you provide more details of how you have the OV10635 sensor connected to J9.

    Regards,
    Paul
  • HI Paul,

    We are only using the processor module of AM572x GP EVM ( and not the LCD module.)
    We developed custom camera connection pcb which helps us to connect OV10635 with P16 header of the processor module.


    Changes done are as below .

    1. /board-support/u-boot-2016.05+gitAUTOINC+6c5519b6fc-g6c5519b6fc/board/ti/am57xx/mux_data.h

    const struct pad_conf_entry core_padconf_array_essential_x15[] = {

    #if 0
    {GPMC_AD12, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad12.vin3a_d12 */
    {GPMC_AD13, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad13.vin3a_d13 */
    {GPMC_AD14, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad14.vin3a_d14 */
    {GPMC_AD15, (M2 | PIN_INPUT | MANUAL_MODE)}, /* gpmc_ad15.vin3a_d15 */
    #endif


    {GPMC_AD12, (M14 | PIN_OUTPUT )}, /* gpmc_ad12.gpio1_18 */
    {GPMC_AD13, (M14 | PIN_OUTPUT )}, /* gpmc_ad13.gpio1_19 */
    {GPMC_AD14, (M14 | PIN_OUTPUT_PULLUP )}, /* gpmc_ad14.gpio1_20 */
    {GPMC_AD15, (M14 | PIN_OUTPUT )}, /* gpmc_ad15.gpio1_21 */


    #if 0 //Pallab :- remove as our new cam board not using this
    {MCASP1_AXR8, (M14 | PIN_INPUT)}, /* mcasp1_axr8.gpio5_10 */
    {MCASP1_AXR9, (M14 | PIN_INPUT)}, /* mcasp1_axr9.gpio5_11 */
    {MCASP1_AXR10, (M14 | PIN_INPUT)}, /* mcasp1_axr10.gpio5_12 */
    {MCASP1_AXR11, (M14 | PIN_INPUT_PULLUP)}, /* mcasp1_axr11.gpio4_17 */
    #endif


    /*{GPMC_A4, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},*/ /* gpmc_a4.vin3a_d20 */
    /*{GPMC_A5, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},*/ /* gpmc_a5.vin3a_d21 */

    {GPMC_A4, (M7 | PIN_INPUT_PULLUP )}, /* gpmc_a4.i2c5_sda Pallab :- New cam board config*/
    {GPMC_A5, (M7 | PIN_INPUT_PULLUP )}, /* gpmc_a5.i2c5_scl Pallab :- New cam board config*/

    /*{GPMC_A13, (M14 | PIN_INPUT_PULLDOWN)},*/ /* gpmc_a13.gpio2_3 */ //Pallab :- Not needed as its not connects to lcd now



    2. Device tree changes

    /ti/board-support/linux-4.4.32+gitAUTOINC+adde2ca9f8-gadde2ca9f8/arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi

    &i2c5 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&i2c5_pins_default>;
    clock-frequency = <400000>;
    ovcamera@30 {
    compatible = "ovti,ov10635";
    reg = <0x30>;
    //mux-gpios = <&pcf_hdmi 3 GPIO_ACTIVE_LOW>;
    port {
    cam: endpoint {
    remote-endpoint = <&vin3a>;
    hsync-active = <1>;
    vsync-active = <1>;
    pclk-sample = <1>;
    };
    };
    };

    };

    &vip2 {
    status = "okay";
    };

    &vin3a {
    status = "okay";
    endpoint {
    slave-mode;
    remote-endpoint = <&cam>;
    };
    };

    If you need any more details/clarity please let me know
  • It sounds like you verified some functionality of the I2C port and your question is more related to software driver operation. If so, I will not be able to help.

    I can try to answer hardware questions related to the AM572x GP EVM.

    Your last reply states your hardware was connected directly to P16 of the processor module. The original configuration of the AM572x GP EVM has the camera module connected to the processor board via the LCD module. The I2C port being used in this original configuration is I2C5 and connects to the processor module via P18. Are you using the same I2C port?

    Someone else ask a similar question in another E2E forum thread. Are you working with someone named Rahul? If so, hopefully the software will be able to help with this issue since his post was forwarded to the software team.

    Regards,

    Paul