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.

AM5728: unable to get interrupt on vip port (vin3a , vip2)

Part Number: AM5728
Other Parts Discussed in Thread: TMDSEVM572X

Hello Team,

I am using TMDSEVM572X board for development.

As I mentioned earlier in my previous thread that I want to get data from 80x80 thermal

sensor where pixels info are :-

8bit raw - monochrome , 1pixel = 2byte.

Sensor gives hsync , vsync , pclk (sourced by external crystal:- 750khz) and 8 bit parallel data.

Data shall be captured on falling edge of pclk and sampled on rising edge of pclk.

I was looping in a problem regarding v4l2-sub driver since last two weeks, but I resolved this

by using ov490 driver instead of using my custom v4l2 sub-driver.

In ov490.c file , I comment in all the i2c transfer (reg_write) function from where it sends to actual ov490 sensor.

I only configure below parameters according to vip documentation.

get_fmt()

set_fmt()

enum_mbus_code()

enum_frames_sizes()

s_steram()

I also make separate .dtso file for ov490 in arch/arm/boot/dts/ti, where I wrote

&i2c5 {
  
    
    status = "okay";
    clock-frequency = <50000>;    
    
    ov490@14 {
        compatible = "ovti,ov490";
        reg = <0x14>;

      
        port {
            csi2_cam0: endpoint@0 {
                bus-type = <0>;
                bus-width = <8>;
                hsync-active = <1>;
            //    input-clock-freq = <32000000>;
                pclk-sample = <1>;
                pixel-clock-freq = <750000>;    //750khZ
                channels = <1>;
                vsync-active = <1>;
                data-shift = <0>;
                
                
                remote-endpoint = <&csi2_phy0>;
            };
        };
    };
};

&vip2 {
    status = "okay";
};

&vin3a {
    csi2_phy0: endpoint@0 {
        bus-type = <0>;
        bus-width = <8>;
        hsync-active = <1>;
        channels = <1>;
        pclk-sample = <1>;
        
                
        vsync-active = <1>;
        data-shift = <0>;
        
        
        remote-endpoint = <&csi2_cam0>;
    };
};

the generated .dtb file is getting copied to /rootfs/boot/

I am getting the /dev/video1 instance when I type on terminal

dmesg | grep video

videodev: linux video capture interface: v2.00

vpe: 489d0000.vpe: Device registered as /dev/video0

vin3a-0: device registered as video1

dmesg | grep ov490

vin3a: Port a: using subdev ov490 4-0014 for capture.

the sensor is getting initialized by separate user space i2c test application,

data lines , pclk, hsync ,vsync are verified on DSO.

I have downloaded the yavta test application from github.

when the application gets run, the buffers get created for enqueue but dequeue

operation not performed it get stucked in ioctl(dev->fd, VIDIOC_DQBUF, &buf);

by the command defined in documentation

cat /proc/interrupts | grep vip

getting nothing , no interrupts found.

In vip documentation.

Why I am not seeing any interrupt generated from the sensor?

Not getting any interrupts usually means the module is not receiving/detecting video data. To proceed with debugging, probe the pclk, vysnc and hsync signal at the connector. If they look as what you are expecting, then verify the pinmux.

I think already 24 bit pinmux is defined in mux_data.h file 

const struct pad_conf_entry core_padconf_array_essential_x15[] = {
    {GPMC_AD0, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad0.vin3a_d0 */
    {GPMC_AD1, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad1.vin3a_d1 */
    {GPMC_AD2, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad2.vin3a_d2 */
    {GPMC_AD3, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad3.vin3a_d3 */
    {GPMC_AD4, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad4.vin3a_d4 */
    {GPMC_AD5, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad5.vin3a_d5 */
    {GPMC_AD6, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad6.vin3a_d6 */
    {GPMC_AD7, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad7.vin3a_d7 */
    {GPMC_AD8, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad8.vin3a_d8 */
    {GPMC_AD9, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad9.vin3a_d9 */
    {GPMC_AD10, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad10.vin3a_d10 */
    {GPMC_AD11, (M2 | PIN_INPUT | MANUAL_MODE)},    /* gpmc_ad11.vin3a_d11 */
    {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 */
    {GPMC_A0, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a0.vin3a_d16 */
    {GPMC_A1, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a1.vin3a_d17 */
    {GPMC_A2, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a2.vin3a_d18 */
    {GPMC_A3, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a3.vin3a_d19 */
    {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_A6, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a6.vin3a_d22 */
    {GPMC_A7, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a7.vin3a_d23 */
    {GPMC_A8, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a8.vin3a_hsync0 */
    {GPMC_A9, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a9.vin3a_vsync0 */
    {GPMC_A10, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a10.vin3a_de0 */
    {GPMC_A11, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a11.vin3a_fld0 */
    {GPMC_A12, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_a12.gpio2_2 */
    {GPMC_A13, (M14 | PIN_INPUT_PULLDOWN)},    /* gpmc_a13.gpio2_3 */
    {GPMC_A14, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_a14.gpio2_4 */
    {GPMC_A15, (M14 | PIN_INPUT_PULLDOWN)},    /* gpmc_a15.gpio2_5 */
    {GPMC_A16, (M14 | PIN_INPUT_PULLDOWN)},    /* gpmc_a16.gpio2_6 */
    {GPMC_A17, (M14 | PIN_INPUT_PULLDOWN)},    /* gpmc_a17.gpio2_7 */
    {GPMC_A18, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_a18.gpio2_8 */
    {GPMC_A19, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a19.mmc2_dat4 */
    {GPMC_A20, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a20.mmc2_dat5 */
    {GPMC_A21, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a21.mmc2_dat6 */
    {GPMC_A22, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a22.mmc2_dat7 */
    {GPMC_A23, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a23.mmc2_clk */
    {GPMC_A24, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a24.mmc2_dat0 */
    {GPMC_A25, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a25.mmc2_dat1 */
    {GPMC_A26, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a26.mmc2_dat2 */
    {GPMC_A27, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a27.mmc2_dat3 */
    {GPMC_CS1, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_cs1.mmc2_cmd */
    {GPMC_CS0, (M14 | PIN_INPUT_PULLDOWN)},    /* gpmc_cs0.gpio2_19 */
    {GPMC_CS2, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_cs2.gpio2_20 */
    {GPMC_CS3, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_cs3.vin3a_clk0 */
    {GPMC_CLK, (M9 | PIN_INPUT_PULLDOWN)},    /* gpmc_clk.dma_evt1 */
    {GPMC_ADVN_ALE, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_advn_ale.gpio2_23 */
    {GPMC_OEN_REN, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_oen_ren.gpio2_24 */
    {GPMC_WEN, (M14 | PIN_INPUT_PULLUP)},    /* gpmc_wen.gpio2_25 */
    {GPMC_BEN0, (M9 | PIN_INPUT_PULLDOWN)},    /* gpmc_ben0.dma_evt3 */
    {GPMC_BEN1, (M9 | PIN_INPUT_PULLDOWN)},    /* gpmc_ben1.dma_evt4 */
    {GPMC_WAIT0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* gpmc_wait0.gpio2_28 */
    {VIN1B_CLK1, (M14 | PIN_INPUT_SLEW)},    /* vin1b_clk1.gpio2_31 */
    {VIN1A_D2, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d2.gpio3_6 */
    {VIN1A_D3, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d3.gpio3_7 */
    {VIN1A_D4, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d4.gpio3_8 */
    {VIN1A_D5, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d5.gpio3_9 */
    {VIN1A_D6, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d6.gpio3_10 */
    {VIN1A_D7, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d7.gpio3_11 */
    {VIN1A_D8, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d8.gpio3_12 */
    {VIN1A_D10, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d10.gpio3_14 */
    {VIN1A_D11, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d11.gpio3_15 */
    {VIN1A_D12, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d12.gpio3_16 */
    {VIN1A_D14, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d14.gpio3_18 */
    {VIN1A_D16, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d16.gpio3_20 */
    {VIN1A_D19, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d19.gpio3_23 */
    {VIN1A_D20, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d20.gpio3_24 */
    {VIN1A_D22, (M14 | PIN_INPUT_PULLDOWN)},    /* vin1a_d22.gpio3_26 */
    {VIN2A_CLK0, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_clk0.gpio3_28 */
    {VIN2A_DE0, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_de0.gpio3_29 */
    {VIN2A_FLD0, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_fld0.gpio3_30 */
    {VIN2A_HSYNC0, (M11 | PIN_INPUT_PULLUP)},    /* vin2a_hsync0.pr1_uart0_cts_n */
    {VIN2A_VSYNC0, (M11 | PIN_OUTPUT_PULLUP)},    /* vin2a_vsync0.pr1_uart0_rts_n */
    {VIN2A_D0, (M11 | PIN_INPUT_PULLUP)},    /* vin2a_d0.pr1_uart0_rxd */
    {VIN2A_D1, (M11 | PIN_OUTPUT)},    /* vin2a_d1.pr1_uart0_txd */
    {VIN2A_D2, (M8 | PIN_INPUT_PULLUP)},    /* vin2a_d2.uart10_rxd */
    {VIN2A_D3, (M8 | PIN_OUTPUT)},    /* vin2a_d3.uart10_txd */
    {VIN2A_D4, (M8 | PIN_INPUT_PULLUP)},    /* vin2a_d4.uart10_ctsn */
    {VIN2A_D5, (M8 | PIN_OUTPUT_PULLUP)},    /* vin2a_d5.uart10_rtsn */
    {VIN2A_D6, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_d6.gpio4_7 */
    {VIN2A_D7, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_d7.gpio4_8 */
    {VIN2A_D8, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_d8.gpio4_9 */
    {VIN2A_D9, (M14 | PIN_INPUT_PULLDOWN)},    /* vin2a_d9.gpio4_10 */
    {VIN2A_D10, (M10 | PIN_OUTPUT_PULLDOWN)},    /* vin2a_d10.ehrpwm2B */
    {VIN2A_D11, (M10 | PIN_INPUT_PULLDOWN)},    /* vin2a_d11.ehrpwm2_tripzone_input */
    {VIN2A_D12, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d12.rgmii1_txc */
    {VIN2A_D13, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d13.rgmii1_txctl */
    {VIN2A_D14, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d14.rgmii1_txd3 */
    {VIN2A_D15, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d15.rgmii1_txd2 */
    {VIN2A_D16, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d16.rgmii1_txd1 */
    {VIN2A_D17, (M3 | PIN_OUTPUT | MANUAL_MODE)},    /* vin2a_d17.rgmii1_txd0 */
    {VIN2A_D18, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d18.rgmii1_rxc */
    {VIN2A_D19, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d19.rgmii1_rxctl */
    {VIN2A_D20, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d20.rgmii1_rxd3 */
    {VIN2A_D21, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d21.rgmii1_rxd2 */
    {VIN2A_D22, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d22.rgmii1_rxd1 */
    {VIN2A_D23, (M3 | PIN_INPUT | MANUAL_MODE)},    /* vin2a_d23.rgmii1_rxd0 */
    {VOUT1_FLD, (M14 | PIN_INPUT)},    /* vout1_fld.gpio4_21 */
    {MDIO_MCLK, (M0 | PIN_OUTPUT | SLEWCONTROL)},    /* mdio_mclk.mdio_mclk */
    {MDIO_D, (M0 | PIN_INPUT | SLEWCONTROL)},    /* mdio_d.mdio_d */
    {RMII_MHZ_50_CLK, (M14 | PIN_INPUT_PULLUP)},    /* RMII_MHZ_50_CLK.gpio5_17 */
    {UART3_RXD, (M14 | PIN_INPUT_SLEW)},    /* uart3_rxd.gpio5_18 */
    {UART3_TXD, (M14 | PIN_INPUT_SLEW)},    /* uart3_txd.gpio5_19 */
    {RGMII0_TXC, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txc.rgmii0_txc */
    {RGMII0_TXCTL, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txctl.rgmii0_txctl */
    {RGMII0_TXD3, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txd3.rgmii0_txd3 */
    {RGMII0_TXD2, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txd2.rgmii0_txd2 */
    {RGMII0_TXD1, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txd1.rgmii0_txd1 */
    {RGMII0_TXD0, (M0 | PIN_OUTPUT | MANUAL_MODE)},    /* rgmii0_txd0.rgmii0_txd0 */
    {RGMII0_RXC, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxc.rgmii0_rxc */
    {RGMII0_RXCTL, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxctl.rgmii0_rxctl */
    {RGMII0_RXD3, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxd3.rgmii0_rxd3 */
    {RGMII0_RXD2, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxd2.rgmii0_rxd2 */
    {RGMII0_RXD1, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxd1.rgmii0_rxd1 */
    {RGMII0_RXD0, (M0 | PIN_INPUT | MANUAL_MODE)},    /* rgmii0_rxd0.rgmii0_rxd0 */
    {USB1_DRVVBUS, (M0 | PIN_OUTPUT | SLEWCONTROL)},    /* usb1_drvvbus.usb1_drvvbus */
    {USB2_DRVVBUS, (M0 | PIN_OUTPUT_PULLDOWN | SLEWCONTROL)},    /* usb2_drvvbus.usb2_drvvbus */
    {GPIO6_14, (M10 | PIN_INPUT_PULLUP)},    /* gpio6_14.timer1 */
    {GPIO6_15, (M10 | PIN_INPUT_PULLUP)},    /* gpio6_15.timer2 */
    {GPIO6_16, (M10 | PIN_INPUT_PULLUP)},    /* gpio6_16.timer3 */
    {XREF_CLK0, (M9 | PIN_OUTPUT_PULLDOWN)},    /* xref_clk0.clkout2 */
    {XREF_CLK1, (M14 | PIN_INPUT_PULLDOWN)},    /* xref_clk1.gpio6_18 */
    {XREF_CLK2, (M14 | PIN_INPUT_PULLDOWN)},    /* xref_clk2.gpio6_19 */
    {XREF_CLK3, (M9 | PIN_OUTPUT_PULLDOWN)},    /* xref_clk3.clkout3 */
    {MCASP1_ACLKX, (M10 | PIN_INPUT_PULLUP)},    /* mcasp1_aclkx.i2c3_sda */
    {MCASP1_FSX, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* mcasp1_fsx.i2c3_scl */
    {MCASP1_ACLKR, (M10 | PIN_INPUT_PULLUP)},    /* mcasp1_aclkr.i2c4_sda */
    {MCASP1_FSR, (M10 | PIN_INPUT_PULLUP)},    /* mcasp1_fsr.i2c4_scl */
    {MCASP1_AXR0, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* G12 mcasp1_axr0.i2c5_sda */
    {MCASP1_AXR1, (M10 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* F12 mcasp1_axr1.i2c5_scl */
    {MCASP1_AXR2, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr2.gpio5_4 */
    {MCASP1_AXR3, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr3.gpio5_5 */
    {MCASP1_AXR4, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr4.gpio5_6 */
    {MCASP1_AXR5, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr5.gpio5_7 */
    {MCASP1_AXR6, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr6.gpio5_8 */
    {MCASP1_AXR7, (M14 | PIN_INPUT_PULLDOWN)},    /* mcasp1_axr7.gpio5_9 */
    {MCASP1_AXR8, (M14 | PIN_INPUT | SLEWCONTROL)},    /* mcasp1_axr8.gpio5_10 */
    {MCASP1_AXR9, (M14 | PIN_OUTPUT | SLEWCONTROL)},    /* mcasp1_axr9.gpio5_11 */
    {MCASP1_AXR10, (M14 | PIN_OUTPUT | SLEWCONTROL)},    /* mcasp1_axr10.gpio5_12 */
    {MCASP1_AXR11, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* mcasp1_axr11.gpio4_17 */
    {MCASP1_AXR12, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)},    /* mcasp1_axr12.mcasp7_axr0 */
    {MCASP1_AXR13, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)},    /* mcasp1_axr13.mcasp7_axr1 */
    {MCASP1_AXR14, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)},    /* mcasp1_axr14.mcasp7_aclkx */
    {MCASP1_AXR15, (M1 | PIN_INPUT_SLEW | VIRTUAL_MODE10)},    /* mcasp1_axr15.mcasp7_fsx */
    {MCASP3_ACLKX, (M0 | PIN_INPUT_PULLDOWN)},    /* mcasp3_aclkx.mcasp3_aclkx */
    {MCASP3_FSX, (M0 | PIN_INPUT_SLEW)},    /* mcasp3_fsx.mcasp3_fsx */
    {MCASP3_AXR0, (M0 | PIN_INPUT_SLEW)},    /* mcasp3_axr0.mcasp3_axr0 */
    {MCASP3_AXR1, (M0 | PIN_INPUT_SLEW)},    /* mcasp3_axr1.mcasp3_axr1 */
    {MCASP4_ACLKX, (M3 | PIN_INPUT_PULLUP)},    /* mcasp4_aclkx.uart8_rxd */
    {MCASP4_FSX, (M3 | PIN_OUTPUT)},    /* mcasp4_fsx.uart8_txd */
    {MCASP4_AXR0, (M3 | PIN_INPUT_PULLUP)},    /* mcasp4_axr0.uart8_ctsn */
    {MCASP4_AXR1, (M3 | PIN_OUTPUT_PULLUP)},    /* mcasp4_axr1.uart8_rtsn */
    {MCASP5_ACLKX, (M3 | PIN_INPUT_PULLUP)},    /* mcasp5_aclkx.uart9_rxd */
    {MCASP5_FSX, (M3 | PIN_OUTPUT)},    /* mcasp5_fsx.uart9_txd */
    {MCASP5_AXR0, (M3 | PIN_INPUT_PULLUP)},    /* mcasp5_axr0.uart9_ctsn */
    {MCASP5_AXR1, (M3 | PIN_OUTPUT_PULLUP)},    /* mcasp5_axr1.uart9_rtsn */
    {MMC1_CLK, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_clk.mmc1_clk */
    {MMC1_CMD, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_cmd.mmc1_cmd */
    {MMC1_DAT0, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_dat0.mmc1_dat0 */
    {MMC1_DAT1, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_dat1.mmc1_dat1 */
    {MMC1_DAT2, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_dat2.mmc1_dat2 */
    {MMC1_DAT3, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_dat3.mmc1_dat3 */
    {MMC1_SDCD, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* mmc1_sdcd.gpio6_27 */
    {GPIO6_10, (M10 | PIN_OUTPUT_PULLDOWN)},    /* gpio6_10.ehrpwm2A */
    {GPIO6_11, (M0 | PIN_INPUT_PULLUP)},    /* gpio6_11.gpio6_11 */
    {MMC3_CLK, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_clk.mmc3_clk */
    {MMC3_CMD, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_cmd.mmc3_cmd */
    {MMC3_DAT0, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat0.mmc3_dat0 */
    {MMC3_DAT1, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat1.mmc3_dat1 */
    {MMC3_DAT2, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat2.mmc3_dat2 */
    {MMC3_DAT3, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat3.mmc3_dat3 */
    {MMC3_DAT4, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat4.mmc3_dat4 */
    {MMC3_DAT5, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat5.mmc3_dat5 */
    {MMC3_DAT6, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat6.mmc3_dat6 */
    {MMC3_DAT7, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},    /* mmc3_dat7.mmc3_dat7 */
    {SPI1_SCLK, (M14 | PIN_INPUT_PULLDOWN)},    /* spi1_sclk.gpio7_7 */
    {SPI1_D1, (M14 | PIN_INPUT_PULLDOWN)},    /* spi1_d1.gpio7_8 */
    {SPI1_D0, (M14 | PIN_INPUT_PULLDOWN)},    /* spi1_d0.gpio7_9 */
    {SPI1_CS0, (M14 | PIN_INPUT)},    /* spi1_cs0.gpio7_10 */
    {SPI1_CS1, (M14 | PIN_INPUT)},    /* spi1_cs1.gpio7_11 */
    {SPI1_CS2, (M14 | PIN_INPUT_SLEW)},    /* spi1_cs2.gpio7_12 */
    {SPI1_CS3, (M6 | PIN_INPUT | SLEWCONTROL)},    /* spi1_cs3.hdmi1_cec */
    {SPI2_SCLK, (M14 | PIN_INPUT_PULLDOWN)},    /* spi2_sclk.gpio7_14 */
    {SPI2_D1, (M14 | PIN_INPUT_SLEW)},    /* spi2_d1.gpio7_15 */
    {SPI2_D0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* spi2_d0.gpio7_16 */
    {SPI2_CS0, (M14 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* spi2_cs0.gpio7_17 */
    {DCAN1_TX, (M0 | PIN_OUTPUT | SLEWCONTROL)},    /* dcan1_tx.dcan1_tx */
    {DCAN1_RX, (M0 | PIN_INPUT | SLEWCONTROL)},    /* dcan1_rx.dcan1_rx */
    {UART1_RXD, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* uart1_rxd.uart1_rxd */
    {UART1_TXD, (M0 | PIN_OUTPUT | SLEWCONTROL)},    /* uart1_txd.uart1_txd */
    {UART1_CTSN, (M14 | PIN_INPUT_PULLDOWN)},    /* uart1_ctsn.gpio7_24 */
    {UART1_RTSN, (M14 | PIN_INPUT)},    /* uart1_rtsn.gpio7_25 */
    {UART2_RXD, (M14 | PIN_INPUT_PULLDOWN)},    /* uart2_rxd.gpio7_26 */
    {UART2_TXD, (M14 | PIN_INPUT_PULLDOWN)},    /* uart2_txd.gpio7_27 */
    {UART2_CTSN, (M2 | PIN_INPUT_PULLUP)},    /* uart2_ctsn.uart3_rxd */
    {UART2_RTSN, (M1 | PIN_OUTPUT)},    /* uart2_rtsn.uart3_txd */
    {I2C1_SDA, (M0 | PIN_INPUT_PULLUP)},    /* i2c1_sda.i2c1_sda */
    {I2C1_SCL, (M0 | PIN_INPUT_PULLUP)},    /* i2c1_scl.i2c1_scl */
    {I2C2_SDA, (M1 | PIN_INPUT_PULLUP)},    /* i2c2_sda.hdmi1_ddc_scl */
    {I2C2_SCL, (M1 | PIN_INPUT_PULLUP)},    /* i2c2_scl.hdmi1_ddc_sda */
    {WAKEUP0, (M0 | PIN_INPUT)},    /* Wakeup0.Wakeup0 */
    {WAKEUP1, (M0 | PIN_INPUT)},    /* Wakeup1.Wakeup1 */
    {WAKEUP2, (M0 | PIN_INPUT)},    /* Wakeup2.Wakeup2 */
    {WAKEUP3, (M0 | PIN_INPUT)},    /* Wakeup3.Wakeup3 */
    {ON_OFF, (M0 | PIN_OUTPUT)},    /* on_off.on_off */
    {RTC_PORZ, (M0 | PIN_INPUT)},    /* rtc_porz.rtc_porz */
    {TMS, (M0 | PIN_INPUT_PULLUP)},    /* tms.tms */
    {TDI, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)},    /* tdi.tdi */
    {TDO, (M0 | PIN_OUTPUT)},    /* tdo.tdo */
    {TCLK, (M0 | PIN_INPUT_PULLDOWN)},    /* tclk.tclk */
    {TRSTN, (M0 | PIN_INPUT)},    /* trstn.trstn */
    {RTCK, (M0 | PIN_OUTPUT)},    /* rtck.rtck */
    {EMU0, (M0 | PIN_INPUT)},    /* emu0.emu0 */
    {EMU1, (M0 | PIN_INPUT)},    /* emu1.emu1 */
    {NMIN_DSP, (M0 | PIN_INPUT)},    /* nmin_dsp.nmin_dsp */
    {RSTOUTN, (M0 | PIN_OUTPUT)},    /* rstoutn.rstoutn */
};

My question is should I do pinmux in dts too or only u-boot side?

I am attaching the kernal log file and ov490.c modified driver file.

Please look into this and provide an appropriate solution.

Thank you .

Regards

Krishna Vashistha

Accurate Optoelectronics Pvt. Ltd.

ov490.c
// SPDX-License-Identifier: GPL-2.0
/*
 * OmniVision OV490 Camera Driver
 *
 * Copyright (C) 2018 Texas Instruments Incorporated -  http://www.ti.com/
 * Author: Nikhil Devshatwar <nikhil.nd@ti.com>
 */

#include <linux/delay.h>
#include <linux/i2c.h>
#include <linux/gpio.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <linux/v4l2-mediabus.h>
#include <linux/videodev2.h>
#include <linux/mutex.h>
#include <linux/delay.h>

#include <media/soc_camera.h>
#include <media/v4l2-async.h>
#include <media/v4l2-common.h>

#include <linux/gpio/consumer.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_graph.h>
#include <media/v4l2-fwnode.h>
#include <media/v4l2-event.h>
#include <media/v4l2-subdev.h>

/* Register definitions */
#define OV490_PID			0x300a
#define OV490_VER			0x300b
#define OV490_BANK_HIGH			0xfffd
#define OV490_BANK_LOW			0xfffe

#define OV490_MIPI_TX_LANE_CTRL2	0x8029202D
#define OV490_MIPI_TX_LANE_CTRL0	0x80292015

#define OV490_SC_RESET1			0x80800011
#define OV490_FW_VER_HIGH		0x80800102
#define OV490_FW_VER_LOW		0x80800103

#define OV490_IMAGE0_CTRL		0x8082000a
#define OV490_IMAGE0_BYTE_INVERT	BIT(7)
#define OV490_IMAGE0_BYTE_SEQUENCE	GEN_MASK(6, 4)
#define OV490_IMAGE0_BYTE_SEQUENCE_1	BIT(4)
#define OV490_IMAGE0_FORMAT_SELECT	GEN_MASK(3, 0)
#define OV490_IMAGE0_FORMAT_PURE_RAW12		0x0
#define OV490_IMAGE0_FORMAT_3X12_RAW		0x2
#define OV490_IMAGE0_FORMAT_2X12_RAW		0x3
#define OV490_IMAGE0_FORMAT_20_COMBINED_RAW	0x4
#define OV490_IMAGE0_FORMAT_16_COMPRESSED_RAW	0x5
#define OV490_IMAGE0_FORMAT_12_COMPRESSED_RAW	0x6
#define OV490_IMAGE0_FORMAT_2X12_COMPRESSED_RAW	0x7
#define OV490_IMAGE0_FORMAT_12_SELECTED_RAW	0x8
#define OV490_IMAGE0_FORMAT_12_YUV422		0xf

/* IDs */
#define OV490_VERSION_REG		0x0490
#define OV490_VERSION(pid, ver)	(((pid) << 8) | ((ver) & 0xff))

#define OV490_MAX_WIDTH			160
#define OV490_MAX_HEIGHT		160

#define MAX_NUM_GPIOS			10

/* Host Command Flow */
#define OV490_STATUS_ADDR		(0x80195ffc)
#define OV490_HOST_CMD_PARA_ADDR	(0x80195000)
#define OV490_HOST_CMD_RESULT_ADDR	(0x80195000)
#define OV490_HOST_INT_ADDR		(0x808000c0)
#define OV490_STATUS_FINISH		(0x99)
#define OV490_STATUS_ERROR		(0x55)

/* Host Command List */
#define OV490_CMD_BRIGHTNESS_SET	(0xf1)
#define OV490_CMD_SATURATION_SET	(0xf3)
#define OV490_CMD_HUE_SET		(0xf5)
#define OV490_CMD_FRAMERATE_SET		(0xf7)
#define OV490_CMD_GAMMA_SET		(0xf9)
#define OV490_CMD_SHARPNESS_SET		(0xfb)
#define OV490_CMD_CONTRAST_SET		(0xfd)
#define OV490_CMD_GROUPWRITE_SET	(0xe1)
#define OV490_CMD_STREAMING_CTRL	(0xe2)
#define OV490_CMD_CONTEXT_SWITCH_CONFIG	(0xe3)
#define OV490_CMD_CONTEXT_SWITCH_CTRL	(0xe4)
#define OV490_CMD_MULT_CMD		(0xe5)
#define OV490_CMD_GPIO_SET		(0xe6)
#define OV490_CMD_GPIO_GET		(0xe7)
#define OV490_CMD_FORMAT_SET		(0xe8)
#define OV490_CMD_TEMP_GET		(0xe9)
#define OV490_CMD_EXPOSURE_GAIN_SET	(0xea)
#define OV490_CMD_AWBGAIN_SET		(0xeb)
#define OV490_CMD_DENOISE_SET		(0xec)
#define OV490_CMD_TONECURVE_SET		(0xed)
#define OV490_CMD_COMB_WEIGHT_SET	(0xee)
#define OV490_CMD_AEC_WEIGHT_SET	(0xd2)
#define OV490_CMD_AWB_ROI_SET		(0xd3)
#define OV490_CMD_TONEMAPPING_ROI_SET	(0xd4)
#define OV490_CMD_STAT_ROI_SET		(0xd5)
#define OV490_CMD_TESTPATTERN_SET	(0xd6)
#define OV490_CMD_MTF_SET		(0xd7)
#define OV490_CMD_LENC_SET		(0xd8)
#define OV490_CMD_BLC_SET		(0xd9)
#define OV490_CMD_GROUPWRITE_LAUNCH	(0xda)
#define OV490_CMD_EMBLINE_CTRL		(0xdb)
#define OV490_CMD_MIRRFLIP_CTRL		(0xdc)
#define OV490_CMD_EXTRA_VTS_SET		(0xde)
#define OV490_CMD_SNR_REG_ACCESS	(0xc1)
#define OV490_CMD_POSTAWBGAIN_SET	(0xc2)
#define OV490_CMD_CROP_SET		(0xc3)
#define OV490_CMD_FRAMESYNC		(0xc4)
#define OV490_CMD_BANDING_SET		(0xc5)
#define OV490_CMD_TOPEMB_SET		(0xc7)
#define OV490_CMD_FWREG_ACCESS		(0x35)
#define OV490_CMD_FADE_CTRL		(0x37)
#define OV490_CMD_INIT_CTRL		(0x39)
#define OV490_CMD_RESET_CTRL		(0x3a)

/*
 * = fvco / pixel_width * num_lanes
 * = 804,000,000 / 16 bits * 4 lanes
 */
#define OV490_PIXEL_RATE_PER_LANE	50250000

static u8 ov490_init_param[] = {
	0x31,	/* [3:0]input port, [7:4]  input format */
	0x01,	/* [3:0]output port, [7:4]  output format */
	0x05,	/* in width: 1288 */
	0x08,
	0x04,	/* in height:1080 */
	0x40,
	0x05,	/* out width: 1288 */
	0x08,
	0x04,	/* out height:1080 */
	0x40,
	0x00,
};

struct ov490_color_format {
	u32 code;
	u32 colorspace;
	u32 coplaner;
	u32 fourcc;
};

struct ov490_priv {
	struct v4l2_subdev		subdev;
	struct v4l2_async_subdev	asd;
	const struct ov490_color_format	*cfmt;
	int				width;
	int				height;
	int				num_lanes;

	struct regmap			*regmap;

	struct gpio_descs		*mux_gpios;

	struct v4l2_ctrl_handler	handler;
	struct v4l2_ctrl		*pixel_rate;
};

/* Main access control */
DEFINE_MUTEX(ov490_lock);
static int ov490_init_gpios(struct i2c_client *client);

/*
 * supported color format list
 */
static const struct ov490_color_format ov490_cfmts[] = {
	{
		.code		= MEDIA_BUS_FMT_SGBRG8_1X8,
		.colorspace	= V4L2_COLORSPACE_SMPTE170M,
		.coplaner = 0,
		.fourcc = V4L2_PIX_FMT_SGBRG8,
		
	},
};

static struct ov490_priv *to_ov490(const struct i2c_client *client)
{
	return container_of(i2c_get_clientdata(client), struct ov490_priv,
			    subdev);
}

static struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl)
{
	return &container_of(ctrl->handler, struct ov490_priv, handler)->subdev;
}

static int ov490_reg_write32(struct regmap *map, u32 reg, u8 val)
{
	u8 bank_high = (reg >> 24) & 0xff;
	u8 bank_low  = (reg >> 16) & 0xff;
	u16 reg_addr = reg & 0xffff;
	int ret = 0;

	/* For writing a register with 32 bit address, First set the bank
	 * address by writing to two BANK address registers. Then access
	 * the register using 16LSB bits.
	 */
	ret = regmap_write(map, OV490_BANK_HIGH, bank_high);
	if (!ret)
		ret = regmap_write(map, OV490_BANK_LOW, bank_low);
	if (!ret)
		ret = regmap_write(map, reg_addr, val);
	return ret;
}

static int ov490_reg_read32(struct regmap *map, u32 reg, u8 *val)
{
	u8 bank_high = (reg >> 24) & 0xff;
	u8 bank_low  = (reg >> 16) & 0xff;
	u16 reg_addr = reg & 0xffff;
	int ret = 0;
	u32 tval = 0;

	/*
	 * For reading a register with 32 bit address, First set the bank
	 * address by writing to two BANK address registers. Then access
	 * the register using 16LSB bits.
	 */
	ret = regmap_write(map, OV490_BANK_HIGH, bank_high);
	if (!ret)
		ret = regmap_write(map, OV490_BANK_LOW, bank_low);
	if (!ret)
		ret = regmap_read(map, reg_addr, &tval);

	*val = (u8)tval;
	return ret;
}

static int ov490_host_control_set(struct regmap *map, u8 host_cmd,
				  u8 *param, u16 number)
{
	int i, ret;
	u8 status = 0;

	/* Host reset OV490_status_register */
	ret = ov490_reg_write32(map, OV490_STATUS_ADDR, 0);
	if (ret)
		return ret;

	for (i = 0; i < number; i++) {
		ret = ov490_reg_write32(map, OV490_HOST_CMD_PARA_ADDR + i,
					*(param + i));
		if (ret)
			return ret;
	}

	ret = ov490_reg_write32(map, OV490_HOST_INT_ADDR, host_cmd);
	if (ret)
		return ret;

	for (i = 500; i && status != OV490_STATUS_FINISH; i--) {
		ret = ov490_reg_read32(map, OV490_STATUS_ADDR, &status);
		if (ret)
			return ret;
		usleep_range(500, 1000);
	}

	if (!i)
		return -ETIMEDOUT;

	return 0;
}

static int __maybe_unused ov490_host_control_get(struct regmap *map,
						 u8 host_cmd, u8 *param,
						 u16 number)
{
	int i, ret;
	u8 status = 0;

	/* Host reset OV490_status_register */
	ret = ov490_reg_write32(map, OV490_STATUS_ADDR, 0);
	if (ret)
		return ret;

	ret = ov490_reg_write32(map, OV490_HOST_INT_ADDR, host_cmd);
	if (ret)
		return ret;

	for (i = 500; i && status != OV490_STATUS_FINISH; i--) {
		ret = ov490_reg_read32(map, OV490_STATUS_ADDR, &status);
		if (ret)
			return ret;
		usleep_range(500, 1000);
	}

	if (!i)
		return -ETIMEDOUT;

	for (i = 0; i < number; i++) {
		ret = ov490_reg_read32(map, OV490_HOST_CMD_PARA_ADDR + i,
				       (param + i));
		if (ret)
			return ret;
	}
	return 0;
}

static int ov490_get_fw_version(struct regmap *map, u16 *id)
{
	u8 hi, lo;
	int ret;

	ret = ov490_reg_read32(map, OV490_FW_VER_HIGH, &hi);
	if (ret)
		return ret;

	ret = ov490_reg_read32(map, OV490_FW_VER_LOW, &lo);
	if (ret)
		return ret;

	*id = hi << 8 | lo;

	return 0;
}

/* Start/Stop streaming from the device */
static int ov490_s_stream(struct v4l2_subdev *sd, int enable)
{
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	struct ov490_priv *priv = to_ov490(client);
	struct regmap *map = priv->regmap;
	int ret, val;
	u8 streaming;

/*	mutex_lock(&ov490_lock);
	ret = ov490_init_gpios(client);
	if (ret) {
		dev_err(&client->dev, "Failed to request gpios");
		goto unlock;
	}

	if (!enable) {
		streaming = 0;
		/* Stop Streaming /
		ret = ov490_host_control_set(map, OV490_CMD_STREAMING_CTRL,
					     &streaming, 1);
		if (ret)
			goto unlock;
		ret = ov490_reg_write32(map, OV490_MIPI_TX_LANE_CTRL0, 0xa0);
		if (ret)
			goto unlock;
		/* Put MIPI_TX in reset 
		ret = ov490_reg_write32(map, OV490_SC_RESET1, 0x80);
		goto unlock;
	}

	/* Take MIPI_TX out of reset 
	ret = ov490_reg_write32(map, OV490_SC_RESET1, 0x00);
	if (ret)
		goto unlock;
	ret = ov490_reg_write32(map, OV490_MIPI_TX_LANE_CTRL0, 0x80);
	if (ret)
		goto unlock;

	/* Initialize slave 
	ret = ov490_host_control_set(map, OV490_CMD_INIT_CTRL, ov490_init_param,
				     ARRAY_SIZE(ov490_init_param));
	if (ret)
		goto unlock;

	ret = ov490_reg_write32(map, OV490_IMAGE0_CTRL,
				OV490_IMAGE0_BYTE_INVERT |
				OV490_IMAGE0_BYTE_SEQUENCE_1 |
				OV490_IMAGE0_FORMAT_3X12_RAW);
	if (ret)
		goto unlock;

	/* Set number of data lane to use 
	val = priv->num_lanes == 2 ? 0x03 : priv->num_lanes == 4 ? 0x0F : 0x0F;
	ret = ov490_reg_write32(map, OV490_MIPI_TX_LANE_CTRL2, val);
	if (ret)
		goto unlock;

	/* Start Streaming 
	streaming = 0x1;
	ret = ov490_host_control_set(map, OV490_CMD_STREAMING_CTRL,
				     &streaming, 1);

unlock:
	mutex_unlock(&ov490_lock);
*/
	return ret;
}

static int ov490_get_fmt(struct v4l2_subdev *sd,
			 struct v4l2_subdev_pad_config *cfg,
			 struct v4l2_subdev_format *fmt)
{
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	struct ov490_priv *priv = to_ov490(client);
	struct v4l2_mbus_framefmt *mf = &fmt->format;

	mf->width	= priv->width;
	mf->height	= priv->height;
	mf->code	= priv->cfmt->code;
	mf->colorspace	= priv->cfmt->colorspace;
	mf->field	= V4L2_FIELD_NONE;

	return 0;
}

/* Fixed format - no configurability */
static int ov490_set_fmt(struct v4l2_subdev *sd,
			 struct v4l2_subdev_pad_config *cfg,
			 struct v4l2_subdev_format *fmt)
{
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	struct ov490_priv *priv = to_ov490(client);
	struct v4l2_mbus_framefmt *mf = &fmt->format;

	mf->width	= priv->width;
	mf->height	= priv->height;
	mf->code	= priv->cfmt->code;
	mf->colorspace	= priv->cfmt->colorspace;
	mf->field	= V4L2_FIELD_NONE;

	return 0;
}

static int ov490_enum_code(struct v4l2_subdev *sd,
			   struct v4l2_subdev_pad_config *cfg,
			   struct v4l2_subdev_mbus_code_enum *code)
{
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	struct ov490_priv *priv = to_ov490(client);
		
	if (code->index >= ARRAY_SIZE(ov490_cfmts))
		return -EINVAL;

	
	code->code = ov490_cfmts[0].code;
	dev_info(&client->dev, "enum code set!");

	return 0;
}

static int ov490_enum_size(struct v4l2_subdev *sd,
			   struct v4l2_subdev_pad_config *cfg,
			   struct v4l2_subdev_frame_size_enum *fse)
{
	int cam_width[] =	{ OV490_MAX_WIDTH };
	int cam_height[] =	{ OV490_MAX_HEIGHT };

	if (fse->index >= ARRAY_SIZE(cam_width))
		return -EINVAL;

	fse->min_width  = cam_width[fse->index];
	fse->max_width  = fse->min_width;
	fse->min_height = cam_height[fse->index];
	fse->max_height = fse->min_height;
	return 0;
}

static int ov490_s_ctrl(struct v4l2_ctrl *ctrl)
{
	struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
	struct i2c_client *client = v4l2_get_subdevdata(sd);

	/* If the board has programmable pixel clock, set it here */
	if (ctrl->id == V4L2_CID_PIXEL_RATE)
		dev_info(&client->dev, "Pixel rate set to %d\n",
			 ctrl->val);
	return 0;
}

static int ov490_init_gpios(struct i2c_client *client)
{
	struct ov490_priv *priv = to_ov490(client);
	int ret = 0;

	/* Request the gpio lines and set the values
	 * then release them so that other drivers can use them
	 * This allows changing common board muxes which are
	 * controlled by multiple drivers
	 */
	priv->mux_gpios = gpiod_get_array(&client->dev, "mux", GPIOD_OUT_HIGH);
	if (IS_ERR(priv->mux_gpios))
		goto done;
	gpiod_put_array(priv->mux_gpios);
done:
	return ret;
}

static int ov490_video_probe(struct i2c_client *client)
{
	struct ov490_priv *priv = i2c_get_clientdata(client);
	u32 pid, ver;
	int ret;
	u16 version;

	/* check and show product ID and manufacturer ID */
/*	ret = regmap_read(priv->regmap, OV490_PID, &pid);
	if (ret)
		return ret;

	ret = regmap_read(priv->regmap, OV490_VER, &ver);
	if (ret)
		return ret;

	if (OV490_VERSION(pid, ver) != OV490_VERSION_REG) {
		dev_err(&client->dev, "Product ID error %02x:%02x\n", pid, ver);
		return -ENODEV;
	}

	dev_info(&client->dev, "ov490 Product ID %02x Manufacturer ID %02x\n",
		 pid, ver);

	ret = ov490_get_fw_version(priv->regmap, &version);
	if (ret)
		return ret;
*/
	dev_info(&client->dev, "lte80 driver registered");

	return 0;
}

static const struct v4l2_subdev_video_ops ov490_video_ops = {
	.s_stream		= ov490_s_stream,
};

static const struct v4l2_subdev_core_ops ov490_core_ops = {
	.log_status		= v4l2_ctrl_subdev_log_status,
	.subscribe_event	= v4l2_ctrl_subdev_subscribe_event,
	.unsubscribe_event	= v4l2_event_subdev_unsubscribe,

};

static const struct v4l2_subdev_pad_ops ov490_pad_ops = {
	.enum_mbus_code		= ov490_enum_code,
	.enum_frame_size	= ov490_enum_size,
	.get_fmt		= ov490_get_fmt,
	.set_fmt		= ov490_set_fmt,
};

static const struct v4l2_subdev_ops ov490_subdev_ops = {
	.video	= &ov490_video_ops,
	.core	= &ov490_core_ops,
	.pad	= &ov490_pad_ops,
};

static const struct v4l2_ctrl_ops ov490_ctrl_ops = {
	.s_ctrl = ov490_s_ctrl,
};

static const struct regmap_config ov490_regmap_config = {
	.reg_bits = 16,
	.val_bits = 8,
};

/*
 * i2c_driver function
 */

static int ov490_of_probe(struct i2c_client *client,
			  struct device_node *node)
{
	struct ov490_priv *priv = to_ov490(client);
	struct v4l2_fwnode_endpoint endpoint = {};
	struct device_node *ep;
	int num_lanes = 0;

	ep = of_graph_get_next_endpoint(node, NULL);
	if (ep) {
		v4l2_fwnode_endpoint_parse(of_fwnode_handle(ep), &endpoint);
		if (endpoint.bus_type == V4L2_MBUS_PARALLEL)
		 {
			dev_info(&client->dev, "parallel bus found!\n");
		}
		 else
		 {
			dev_err(&client->dev, "Endpoint bus is not CSI bus!");
		}
	}

	dev_info(&client->dev, "Using %d data lanes\n", priv->num_lanes);

	return 0;
}

static int ov490_probe(struct i2c_client *client,
		       const struct i2c_device_id *did)
{
	struct device_node *node = client->dev.of_node;
	struct v4l2_ctrl_handler *hdl;
	struct ov490_priv *priv;
	struct v4l2_subdev *sd;
	int ret = 0;

	priv = devm_kzalloc(&client->dev, sizeof(*priv), GFP_KERNEL);
	if (!priv)
		return -ENOMEM;

	i2c_set_clientdata(client, priv);
	//priv->num_lanes = 4;
	priv->cfmt = &ov490_cfmts[0];
	priv->width = OV490_MAX_WIDTH;
	priv->height = OV490_MAX_HEIGHT;

/*	priv->regmap = devm_regmap_init_i2c(client, &ov490_regmap_config);
	if (IS_ERR(priv->regmap))
		return PTR_ERR(priv->regmap);*/

	ret = ov490_video_probe(client);
	if (ret)
		goto err;

	ret = ov490_of_probe(client, node);
	if (ret)
		goto err;

	sd = &priv->subdev;
	v4l2_i2c_subdev_init(sd, client, &ov490_subdev_ops);

	hdl = &priv->handler;
	sd->ctrl_handler = hdl;
	v4l2_ctrl_handler_init(hdl, 1);
/*	priv->pixel_rate =
		v4l2_ctrl_new_std(hdl, &ov490_ctrl_ops,
				  V4L2_CID_PIXEL_RATE, 1, INT_MAX, 1,
				  OV490_PIXEL_RATE_PER_LANE * priv->num_lanes);

	if (hdl->error) {
		dev_err(&client->dev, "Failed to add controls");
		ret = hdl->error;
		goto err;
	}

	ret = ov490_init_gpios(client);
	if (ret) {
		dev_err(&client->dev, "Failed to request gpios");
		goto err;
	}
*/
	sd->dev = &client->dev;
	ret = v4l2_async_register_subdev(sd);

err:
	return ret;
}

static int ov490_remove(struct i2c_client *client)
{
	struct ov490_priv *priv = i2c_get_clientdata(client);

	v4l2_device_unregister_subdev(&priv->subdev);
	v4l2_ctrl_handler_free(&priv->handler);

	return 0;
}

static const struct i2c_device_id ov490_id[] = {
	{ "ov490", 0 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, ov490_id);

static const struct of_device_id ov490_dt_id[] = {
	{
		.compatible = "ovti,ov490",
	},
	{
	}
};
MODULE_DEVICE_TABLE(of, ov490_dt_id);

static struct i2c_driver ov490_i2c_driver = {
	.driver = {
		.name	= "ov490",
		.of_match_table = ov490_dt_id,
	},
	.probe = ov490_probe,
	.remove = ov490_remove,
	.id_table = ov490_id,
};

module_i2c_driver(ov490_i2c_driver);

MODULE_DESCRIPTION("SoC Camera driver for OmniVision OV490");
MODULE_AUTHOR("Nikhil Devshatwar <nikhil.nd@ti.com>");
MODULE_LICENSE("GPL v2");

4278.log.txt
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.19.79-g77dfab56c6 (root@krishna-desktop) (gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))) #1 SMP PREEMPT Fri Oct 16 18:07:20 IST 2020
[    0.000000] CPU: ARMv7 Processor [412fc0f2] revision 2 (ARMv7), cr=30c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[    0.000000] OF: fdt: Machine model: TI AM5728 EVM
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB
[    0.000000] OF: reserved mem: initialized node ipu2-memory@95800000, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB
[    0.000000] OF: reserved mem: initialized node dsp1-memory@99000000, compatible id shared-dma-pool
[    0.000000] Reserved memory: created DMA memory pool at 0x000000009d000000, size 32 MiB
[    0.000000] OF: reserved mem: initialized node ipu1-memory@9d000000, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x000000009f000000, size 8 MiB
[    0.000000] OF: reserved mem: initialized node dsp2-memory@9f000000, compatible id shared-dma-pool
[    0.000000] cma: Reserved 24 MiB at 0x00000000fe400000
[    0.000000] OMAP4: Map 0x00000000ffd00000 to (ptrval) for dram barrier
[    0.000000] On node 0 totalpages: 465920
[    0.000000]   DMA zone: 1728 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 139008 pages, LIFO batch:31
[    0.000000]   HighMem zone: 326912 pages, LIFO batch:63
[    0.000000] DRA752 ES2.0
[    0.000000] random: get_random_bytes called from start_kernel+0xb4/0x470 with crng_init=0
[    0.000000] percpu: Embedded 15 pages/cpu s32396 r8192 d20852 u61440
[    0.000000] pcpu-alloc: s32396 r8192 d20852 u61440 alloc=15*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 464192
[    0.000000] Kernel command line: console=ttyS2,115200n8 root=PARTUUID=c022d921-02 rw rootfstype=ext4 rootwait
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Memory: 1672964K/1863680K available (10240K kernel code, 335K rwdata, 2800K rodata, 2048K init, 269K bss, 35068K reserved, 155648K cma-reserved, 1283072K highmem)
[    0.000000] Virtual kernel memory layout:
                   vector  : 0xffff0000 - 0xffff1000   (   4 kB)
                   fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
                   vmalloc : 0xf0800000 - 0xff800000   ( 240 MB)
                   lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)
                   pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
                   modules : 0xbf000000 - 0xbfe00000   (  14 MB)
                     .text : 0x(ptrval) - 0x(ptrval)   (12256 kB)
                     .init : 0x(ptrval) - 0x(ptrval)   (2048 kB)
                     .data : 0x(ptrval) - 0x(ptrval)   ( 336 kB)
                      .bss : 0x(ptrval) - 0x(ptrval)   ( 270 kB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] 	Tasks RCU enabled.
[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] OMAP clockevent source: timer1 at 32786 Hz
[    0.000000] arch_timer: cp15 timer(s) running at 6.14MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x16af5adb9, max_idle_ns: 440795202250 ns
[    0.000005] sched_clock: 56 bits at 6MHz, resolution 162ns, wraps every 4398046511023ns
[    0.000018] Switching to timer-based delay loop, resolution 162ns
[    0.000295] clocksource: 32k_counter: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 58327039986419 ns
[    0.000305] OMAP clocksource: 32k_counter at 32768 Hz
[    0.000821] Console: colour dummy device 80x30
[    0.000865] Calibrating delay loop (skipped), value calculated using timer frequency.. 12.29 BogoMIPS (lpj=61475)
[    0.000883] pid_max: default: 32768 minimum: 301
[    0.001009] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.001024] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.001589] CPU: Testing write buffer coherency: ok
[    0.001627] CPU0: Spectre v2: using ICIALLU workaround
[    0.001844] /cpus/cpu@0 missing clock-frequency property
[    0.001866] /cpus/cpu@1 missing clock-frequency property
[    0.001879] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[    0.059871] Setting up static identity map for 0x80200000 - 0x80200060
[    0.079875] rcu: Hierarchical SRCU implementation.
[    0.100062] EFI services will not be available.
[    0.119926] smp: Bringing up secondary CPUs ...
[    0.200300] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
[    0.200306] CPU1: Spectre v2: using ICIALLU workaround
[    0.200429] smp: Brought up 1 node, 2 CPUs
[    0.200440] SMP: Total of 2 processors activated (24.59 BogoMIPS).
[    0.200449] CPU: All CPU(s) started in HYP mode.
[    0.200457] CPU: Virtualization extensions available.
[    0.201017] devtmpfs: initialized
[    0.221101] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0
[    0.221362] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.221381] futex hash table entries: 512 (order: 3, 32768 bytes)
[    0.224011] pinctrl core: initialized pinctrl subsystem
[    0.224536] DMI not present or invalid.
[    0.224815] NET: Registered protocol family 16
[    0.225960] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.226909] omap_hwmod: l3_main_2 using broken dt data from ocp
[    0.330224] wkupaon_cm:clk:0068:0: failed to disable
[    0.429361] cpuidle: using governor ladder
[    0.429397] cpuidle: using governor menu
[    0.440472] gpio gpiochip0: (gpio-0-31): added GPIO chardev (254:0)
[    0.440544] gpiochip_setup_dev: registered GPIOs 0 to 31 on device: gpiochip0 (gpio-0-31)
[    0.440586] OMAP GPIO hardware version 0.1
[    0.441219] gpio gpiochip1: (gpio-32-63): added GPIO chardev (254:1)
[    0.441290] gpiochip_setup_dev: registered GPIOs 32 to 63 on device: gpiochip1 (gpio-32-63)
[    0.441924] gpio gpiochip2: (gpio-64-95): added GPIO chardev (254:2)
[    0.441990] gpiochip_setup_dev: registered GPIOs 64 to 95 on device: gpiochip2 (gpio-64-95)
[    0.442623] gpio gpiochip3: (gpio-96-127): added GPIO chardev (254:3)
[    0.442688] gpiochip_setup_dev: registered GPIOs 96 to 127 on device: gpiochip3 (gpio-96-127)
[    0.443317] gpio gpiochip4: (gpio-128-159): added GPIO chardev (254:4)
[    0.443382] gpiochip_setup_dev: registered GPIOs 128 to 159 on device: gpiochip4 (gpio-128-159)
[    0.444036] gpio gpiochip5: (gpio-160-191): added GPIO chardev (254:5)
[    0.444108] gpiochip_setup_dev: registered GPIOs 160 to 191 on device: gpiochip5 (gpio-160-191)
[    0.444730] gpio gpiochip6: (gpio-192-223): added GPIO chardev (254:6)
[    0.444796] gpiochip_setup_dev: registered GPIOs 192 to 223 on device: gpiochip6 (gpio-192-223)
[    0.445432] gpio gpiochip7: (gpio-224-255): added GPIO chardev (254:7)
[    0.445497] gpiochip_setup_dev: registered GPIOs 224 to 255 on device: gpiochip7 (gpio-224-255)
[    0.466855] No ATAGs?
[    0.466929] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[    0.466944] hw-breakpoint: maximum watchpoint size is 8 bytes.
[    0.467799] OMAP DMA hardware revision 0.0
[    0.479649] edma 43300000.edma: memcpy is disabled
[    0.483066] edma 43300000.edma: TI EDMA DMA engine driver
[    0.490189] omap-dma-engine 4a056000.dma-controller: OMAP DMA engine driver (LinkedList1/2/3 supported)
[    0.490619] of_get_named_gpiod_flags: parsed 'gpio' property of node '/fixedregulator-mmcwl[0]' - status (0)
[    0.490906] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-com_3v6[0]'
[    0.491330] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-main_12v0[0]'
[    0.491559] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-evm_5v0[0]'
[    0.491583] evm_5v0: supplied by main_12v0
[    0.491840] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-vdd_3v3[0]'
[    0.491981] com_3v6: supplied by evm_5v0
[    0.492143] of_get_named_gpiod_flags: can't parse 'gpio' property of node '/fixedregulator-aic_dvdd[0]'
[    0.492401] of_get_named_gpiod_flags: parsed 'gpio' property of node '/fixedregulator-vtt[0]' - status (0)
[    0.495128] omap-iommu 40d01000.mmu: 40d01000.mmu registered
[    0.495314] omap-iommu 40d02000.mmu: 40d02000.mmu registered
[    0.495562] omap-iommu 58882000.mmu: 58882000.mmu registered
[    0.495796] omap-iommu 55082000.mmu: 55082000.mmu registered
[    0.496178] omap-iommu 41501000.mmu: 41501000.mmu registered
[    0.496356] omap-iommu 41502000.mmu: 41502000.mmu registered
[    0.496647] iommu: Adding device 58820000.ipu to group 1
[    0.496732] iommu: Adding device 55020000.ipu to group 2
[    0.496865] iommu: Adding device 40800000.dsp to group 0
[    0.497105] iommu: Adding device 41000000.dsp to group 3
[    0.498388] SCSI subsystem initialized
[    0.499461] palmas 0-0058: Irq flag is 0x00000008
[    0.523380] palmas 0-0058: Muxing GPIO 2f, PWM 0, LED 0
[    0.524965] SMPS12: supplied by regulator-dummy
[    0.526569] SMPS3: supplied by regulator-dummy
[    0.528136] SMPS45: supplied by regulator-dummy
[    0.529864] SMPS6: supplied by regulator-dummy
[    0.531219] SMPS7: supplied by regulator-dummy
[    0.532548] SMPS8: supplied by regulator-dummy
[    0.533750] SMPS9: supplied by regulator-dummy
[    0.534411] LDO1: supplied by regulator-dummy
[    0.534673] random: fast init done
[    0.551230] LDO2: supplied by regulator-dummy
[    0.571099] LDO3: supplied by regulator-dummy
[    0.591113] LDO4: supplied by regulator-dummy
[    0.611139] LDO5: supplied by regulator-dummy
[    0.611811] LDO6: supplied by regulator-dummy
[    0.612477] LDO7: supplied by regulator-dummy
[    0.613145] LDO8: supplied by regulator-dummy
[    0.613818] LDO9: supplied by regulator-dummy
[    0.631176] LDOLN: supplied by regulator-dummy
[    0.651189] LDOUSB: supplied by regulator-dummy
[    0.672808] gpiochip_find_base: found new base at 504
[    0.672967] gpio gpiochip8: (48070000.i2c:tps659038@58:tps659038_gpio): added GPIO chardev (254:8)
[    0.673036] gpiochip_setup_dev: registered GPIOs 504 to 511 on device: gpiochip8 (48070000.i2c:tps659038@58:tps659038_gpio)
[    0.673604] omap_i2c 48070000.i2c: bus 0 rev0.12 at 400 kHz
[    0.674226] omap_i2c 48060000.i2c: bus 2 rev0.12 at 400 kHz
[    0.674719] omap_i2c 4807c000.i2c: bus 4 rev0.12 at 50 kHz
[    0.674930] media: Linux media interface: v0.10
[    0.674973] videodev: Linux video capture interface: v2.00
[    0.675046] pps_core: LinuxPPS API ver. 1 registered
[    0.675055] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.675076] PTP clock support registered
[    0.675105] EDAC MC: Ver: 3.0.0
[    0.675922] omap-mailbox 48840000.mailbox: omap mailbox rev 0x400
[    0.676172] omap-mailbox 48842000.mailbox: omap mailbox rev 0x400
[    0.690775] Advanced Linux Sound Architecture Driver Initialized.
[    0.691563] clocksource: Switched to clocksource arch_sys_counter
[    0.699962] NET: Registered protocol family 2
[    0.700542] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes)
[    0.700570] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
[    0.700843] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
[    0.700971] TCP: Hash tables configured (established 8192 bind 8192)
[    0.701045] UDP hash table entries: 512 (order: 2, 16384 bytes)
[    0.701079] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[    0.701212] NET: Registered protocol family 1
[    0.721654] RPC: Registered named UNIX socket transport module.
[    0.721664] RPC: Registered udp transport module.
[    0.721673] RPC: Registered tcp transport module.
[    0.721681] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.721693] PCI: CLS 0 bytes, default 64
[    0.722767] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[    0.722957] hw perfevents: enabled with armv7_cortex_a15 PMU driver, 7 counters available
[    0.723959] Initialise system trusted keyrings
[    0.724087] workingset: timestamp_bits=14 max_order=19 bucket_order=5
[    0.729214] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.739710] NFS: Registering the id_resolver key type
[    0.739740] Key type id_resolver registered
[    0.739749] Key type id_legacy registered
[    0.739789] ntfs: driver 2.1.32 [Flags: R/O].
[    0.741447] Key type asymmetric registered
[    0.741459] Asymmetric key parser 'x509' registered
[    0.741510] bounce: pool size: 64 pages
[    0.741544] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[    0.741582] io scheduler noop registered
[    0.741591] io scheduler deadline registered
[    0.741688] io scheduler cfq registered (default)
[    0.741699] io scheduler mq-deadline registered
[    0.741709] io scheduler kyber registered
[    0.747695] pinctrl-single 4a003400.pinmux: 282 pins, size 1128
[    0.752408] dra7-pcie 51000000.pcie: Linked as a consumer to phy-4a094000.pciephy.1
[    0.752579] dra7-pcie 51000000.pcie: GPIO lookup for consumer (null)
[    0.752587] dra7-pcie 51000000.pcie: using device tree for GPIO lookup
[    0.752620] of_get_named_gpiod_flags: parsed 'gpios' property of node '/ocp/axi@0/pcie@51000000[0]' - status (0)
[    0.752653] gpio gpiochip1: Persistence not supported for GPIO 8
[    0.752669] dra7-pcie 51000000.pcie: WA for Errata i870 not applied
[    0.752774] dra7-pcie 51000000.pcie: host bridge /ocp/axi@0/pcie@51000000 ranges:
[    0.752817] dra7-pcie 51000000.pcie:    IO 0x20003000..0x20012fff -> 0x00000000
[    0.752845] dra7-pcie 51000000.pcie:   MEM 0x20013000..0x2fffffff -> 0x20013000
[    1.753109] dra7-pcie 51000000.pcie: Phy link never came up
[    1.753247] dra7-pcie 51000000.pcie: PCI host bridge to bus 0000:00
[    1.753261] pci_bus 0000:00: root bus resource [bus 00-ff]
[    1.753273] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
[    1.753284] pci_bus 0000:00: root bus resource [mem 0x20013000-0x2fffffff]
[    1.753319] pci 0000:00:00.0: [104c:8888] type 01 class 0x060400
[    1.753353] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x000fffff 64bit]
[    1.753417] pci 0000:00:00.0: supports D1
[    1.753425] pci 0000:00:00.0: PME# supported from D0 D1 D3hot
[    1.759896] PCI: bus0: Fast back to back transfers disabled
[    1.766084] PCI: bus1: Fast back to back transfers enabled
[    1.766129] pci 0000:00:00.0: BAR 0: assigned [mem 0x20100000-0x201fffff 64bit]
[    1.766150] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[    1.766478] pcieport 0000:00:00.0: Signaling PME with IRQ 175
[    1.766609] pcieport 0000:00:00.0: AER enabled with IRQ 175
[    1.767490] pwm-backlight backlight: GPIO lookup for consumer enable
[    1.767497] pwm-backlight backlight: using device tree for GPIO lookup
[    1.767513] of_get_named_gpiod_flags: can't parse 'enable-gpios' property of node '/backlight[0]'
[    1.767527] of_get_named_gpiod_flags: can't parse 'enable-gpio' property of node '/backlight[0]'
[    1.767536] pwm-backlight backlight: using lookup tables for GPIO lookup
[    1.767544] pwm-backlight backlight: No GPIO consumer enable found
[    1.767583] pwm-backlight backlight: backlight supply power not found, using dummy regulator
[    1.767649] pwm-backlight backlight: Linked as a consumer to regulator.0
[    1.771011] vdd_3v3: supplied by regen1
[    1.771259] aic_dvdd_fixed: supplied by vdd_3v3
[    1.771329] vtt_fixed: supplied by smps3
[    1.822011] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
[    1.825734] console [ttyS2] disabled
[    1.825787] 48020000.serial: ttyS2 at MMIO 0x48020000 (irq = 45, base_baud = 3000000) is a 8250
[    2.938811] console [ttyS2] enabled
[    2.943268] 48422000.serial: ttyS7 at MMIO 0x48422000 (irq = 46, base_baud = 3000000) is a 8250
[    2.954245] omap_rng 48090000.rng: Random Number Generator ver. 20
[    2.954457] hwrng: no data available
[    2.964241] omapdss_dss 58000000.dss: Linked as a consumer to regulator.24
[    2.971327] omapdss_dss 58000000.dss: Dropping the link to regulator.24
[    2.979321] tpd12s015 encoder: GPIO lookup for consumer (null)
[    2.979329] tpd12s015 encoder: using device tree for GPIO lookup
[    2.979358] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[0]' - status (0)
[    2.979375] gpio gpiochip6: Persistence not supported for GPIO 10
[    2.979385] tpd12s015 encoder: GPIO lookup for consumer (null)
[    2.979391] tpd12s015 encoder: using device tree for GPIO lookup
[    2.979415] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[1]' - status (0)
[    2.979428] gpio gpiochip1: Persistence not supported for GPIO 30
[    2.979437] tpd12s015 encoder: GPIO lookup for consumer (null)
[    2.979443] tpd12s015 encoder: using device tree for GPIO lookup
[    2.979468] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[2]' - status (0)
[    2.979480] gpio gpiochip6: Persistence not supported for GPIO 12
[    2.980249] connector-hdmi connector: GPIO lookup for consumer hpd
[    2.980256] connector-hdmi connector: using device tree for GPIO lookup
[    2.980272] of_get_named_gpiod_flags: can't parse 'hpd-gpios' property of node '/connector[0]'
[    2.980285] of_get_named_gpiod_flags: can't parse 'hpd-gpio' property of node '/connector[0]'
[    2.980294] connector-hdmi connector: using lookup tables for GPIO lookup
[    2.980302] connector-hdmi connector: No GPIO consumer hpd found
[    2.981420] panel-simple display: display supply power not found, using dummy regulator
[    2.989545] panel-simple display: Linked as a consumer to regulator.0
[    2.996070] panel-simple display: GPIO lookup for consumer enable
[    2.996078] panel-simple display: using device tree for GPIO lookup
[    2.996105] of_get_named_gpiod_flags: parsed 'enable-gpios' property of node '/display[0]' - status (0)
[    2.996117] gpio gpiochip1: Persistence not supported for GPIO 5
[    3.007435] brd: module loaded
[    3.016852] loop: module loaded
[    3.024529] mdio_bus fixed-0: GPIO lookup for consumer reset
[    3.024538] mdio_bus fixed-0: using lookup tables for GPIO lookup
[    3.024545] mdio_bus fixed-0: No GPIO consumer reset found
[    3.024570] libphy: Fixed MDIO Bus: probed
[    3.032533] mdio_bus 48485000.mdio: GPIO lookup for consumer reset
[    3.032541] mdio_bus 48485000.mdio: using device tree for GPIO lookup
[    3.032559] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/ocp/ethernet@48484000/mdio@48485000[0]'
[    3.032574] of_get_named_gpiod_flags: can't parse 'reset-gpio' property of node '/ocp/ethernet@48484000/mdio@48485000[0]'
[    3.032583] mdio_bus 48485000.mdio: using lookup tables for GPIO lookup
[    3.032591] mdio_bus 48485000.mdio: No GPIO consumer reset found
[    3.091594] davinci_mdio 48485000.mdio: davinci mdio revision 1.6, bus freq 1000000
[    3.099290] libphy: 48485000.mdio: probed
[    3.115450] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/ocp/ethernet@48484000/mdio@48485000/ethernet-phy@1[0]'
[    3.117726] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/ocp/ethernet@48484000/mdio@48485000/ethernet-phy@2[0]'
[    3.117903] davinci_mdio 48485000.mdio: phy[1]: device 48485000.mdio:01, driver Micrel KSZ9031 Gigabit PHY
[    3.127626] davinci_mdio 48485000.mdio: phy[2]: device 48485000.mdio:02, driver Micrel KSZ9031 Gigabit PHY
[    3.137914] cpsw 48484000.ethernet: Detected MACID = 7c:38:66:80:2b:70
[    3.144530] cpsw 48484000.ethernet: initialized cpsw ale version 1.4
[    3.150914] cpsw 48484000.ethernet: ALE Table size 1024
[    3.156225] cpsw 48484000.ethernet: cpts: overflow check period 500 (jiffies)
[    3.164273] cpsw 48484000.ethernet: cpsw: Detected MACID = 7c:38:66:80:2b:71
[    3.172617] i2c /dev entries driver
[    3.178194] gpio-fan gpio_fan: GPIO lookup for consumer alarm
[    3.178202] gpio-fan gpio_fan: using device tree for GPIO lookup
[    3.178220] of_get_named_gpiod_flags: can't parse 'alarm-gpios' property of node '/gpio_fan[0]'
[    3.178234] of_get_named_gpiod_flags: can't parse 'alarm-gpio' property of node '/gpio_fan[0]'
[    3.178243] gpio-fan gpio_fan: using lookup tables for GPIO lookup
[    3.178250] gpio-fan gpio_fan: No GPIO consumer alarm found
[    3.178263] gpio-fan gpio_fan: GPIO lookup for consumer (null)
[    3.178270] gpio-fan gpio_fan: using device tree for GPIO lookup
[    3.178294] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_fan[0]' - status (0)
[    3.178302] no flags found for (null)
[    3.179487] gpio-fan gpio_fan: GPIO fan initialized
[    3.185596] tmp102 0-0048: initialized
[    3.192494] cpu cpu0: Linked as a consumer to regulator.8
[    3.198000] cpu cpu0: Linked as a consumer to regulator.31
[    3.205219] sdhci: Secure Digital Host Controller Interface driver
[    3.211429] sdhci: Copyright(c) Pierre Ossman
[    3.216487] sdhci-pltfm: SDHCI platform and OF driver helper
[    3.223194] sdhci-omap 4809c000.mmc: GPIO lookup for consumer cd
[    3.223200] sdhci-omap 4809c000.mmc: using device tree for GPIO lookup
[    3.223219] of_get_named_gpiod_flags: parsed 'cd-gpios' property of node '/ocp/mmc@4809c000[0]' - status (0)
[    3.223249] gpio gpiochip5: Persistence not supported for GPIO 27
[    3.223257] omap_gpio 4805d000.gpio: Could not set line 27 debounce to 200000 microseconds (-22)
[    3.232111] sdhci-omap 4809c000.mmc: Got CD GPIO
[    3.236749] sdhci-omap 4809c000.mmc: GPIO lookup for consumer wp
[    3.236754] sdhci-omap 4809c000.mmc: using device tree for GPIO lookup
[    3.236765] of_get_named_gpiod_flags: can't parse 'wp-gpios' property of node '/ocp/mmc@4809c000[0]'
[    3.236774] of_get_named_gpiod_flags: can't parse 'wp-gpio' property of node '/ocp/mmc@4809c000[0]'
[    3.236780] sdhci-omap 4809c000.mmc: using lookup tables for GPIO lookup
[    3.236785] sdhci-omap 4809c000.mmc: No GPIO consumer wp found
[    3.236917] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.30
[    3.243954] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.15
[    3.250821] sdhci-omap 4809c000.mmc: Dropping the link to regulator.15
[    3.257461] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.5
[    3.264387] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.15
[    3.271320] sdhci-omap 4809c000.mmc: no pinctrl state for ddr_3_3v mode
[    3.304368] mmc0: SDHCI controller on 4809c000.mmc [4809c000.mmc] using ADMA
[    3.311898] sdhci-omap 480b4000.mmc: GPIO lookup for consumer wp
[    3.311905] sdhci-omap 480b4000.mmc: using device tree for GPIO lookup
[    3.311965] of_get_named_gpiod_flags: can't parse 'wp-gpios' property of node '/ocp/mmc@480b4000[0]'
[    3.311980] of_get_named_gpiod_flags: can't parse 'wp-gpio' property of node '/ocp/mmc@480b4000[0]'
[    3.311989] sdhci-omap 480b4000.mmc: using lookup tables for GPIO lookup
[    3.311997] sdhci-omap 480b4000.mmc: No GPIO consumer wp found
[    3.312368] sdhci-omap 480b4000.mmc: Linked as a consumer to regulator.5
[    3.319181] sdhci-omap 480b4000.mmc: Dropping the link to regulator.5
[    3.325871] sdhci-omap 480b4000.mmc: Linked as a consumer to regulator.5
[    3.358915] mmc1: SDHCI controller on 480b4000.mmc [480b4000.mmc] using ADMA
[    3.366521] sdhci-omap 480ad000.mmc: GPIO lookup for consumer wp
[    3.366528] sdhci-omap 480ad000.mmc: using device tree for GPIO lookup
[    3.366542] of_get_named_gpiod_flags: can't parse 'wp-gpios' property of node '/ocp/mmc@480ad000[0]'
[    3.366555] of_get_named_gpiod_flags: can't parse 'wp-gpio' property of node '/ocp/mmc@480ad000[0]'
[    3.366562] sdhci-omap 480ad000.mmc: using lookup tables for GPIO lookup
[    3.366569] sdhci-omap 480ad000.mmc: No GPIO consumer wp found
[    3.366742] sdhci-omap 480ad000.mmc: Linked as a consumer to regulator.1
[    3.373634] sdhci-omap 480ad000.mmc: Dropping the link to regulator.1
[    3.380195] sdhci-omap 480ad000.mmc: Linked as a consumer to regulator.2
[    3.387169] sdhci-omap 480ad000.mmc: Linked as a consumer to regulator.1
[    3.394024] sdhci-omap 480ad000.mmc: no pinctrl state for sdr104 mode
[    3.400619] sdhci-omap 480ad000.mmc: no pinctrl state for ddr50 mode
[    3.407164] sdhci-omap 480ad000.mmc: no pinctrl state for hs200_1_8v mode
[    3.421837] mmc0: host does not support reading read-only switch, assuming write-enable
[    3.434564] mmc0: new high speed SDHC card at address aaaa
[    3.440056] mmc2: SDHCI controller on 480ad000.mmc [480ad000.mmc] using PIO
[    3.447610] of_get_named_gpiod_flags: parsed 'gpios' property of node '/leds/led0[0]' - status (0)
[    3.447623] gpio gpiochip6: Persistence not supported for GPIO 9
[    3.447627] no flags found for gpios
[    3.447712] of_get_named_gpiod_flags: parsed 'gpios' property of node '/leds/led1[0]' - status (0)
[    3.447724] gpio gpiochip6: Persistence not supported for GPIO 8
[    3.447728] no flags found for gpios
[    3.447808] of_get_named_gpiod_flags: parsed 'gpios' property of node '/leds/led2[0]' - status (0)
[    3.447920] gpio gpiochip6: Persistence not supported for GPIO 14
[    3.447925] no flags found for gpios
[    3.448026] of_get_named_gpiod_flags: parsed 'gpios' property of node '/leds/led3[0]' - status (0)
[    3.448037] gpio gpiochip6: Persistence not supported for GPIO 15
[    3.448042] no flags found for gpios
[    3.448527] ledtrig-cpu: registered to indicate activity on CPUs
[    3.450734] mmcblk0: mmc0:aaaa SC16G 14.8 GiB 
[    3.461420] NET: Registered protocol family 10
[    3.470870] mmc1: new DDR MMC card at address 0001
[    3.475840]  mmcblk0: p1 p2
[    3.476832] Segment Routing with IPv6
[    3.482999] mmcblk1: mmc1:0001 S10004 3.56 GiB 
[    3.483136] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    3.487916] mmcblk1boot0: mmc1:0001 S10004 partition 1 4.00 MiB
[    3.493892] NET: Registered protocol family 17
[    3.499879] mmcblk1boot1: mmc1:0001 S10004 partition 2 4.00 MiB
[    3.504131] Key type dns_resolver registered
[    3.514350] mmcblk1rpmb: mmc1:0001 S10004 partition 3 4.00 MiB, chardev (244:0)
[    3.514433] Registering SWP/SWPB emulation handler
[    3.526555] omap_voltage_late_init: Voltage driver support not added
[    3.527055]  mmcblk1: p1 p2 p3
[    3.532945] Power Management for TI OMAP4+ devices.
[    3.533505] Loading compiled-in X.509 certificates
[    3.563464] dmm 4e000000.dmm: workaround for errata i878 in use
[    3.570776] dmm 4e000000.dmm: initialized all PAT entries
[    3.576994] omapdss_dss 58000000.dss: Linked as a consumer to regulator.24
[    3.584063] DSS: OMAP DSS rev 6.1
[    3.588652] omapdss_hdmi5 58040000.encoder: Linked as a consumer to regulator.18
[    3.596160] omapdss_hdmi5 58040000.encoder: Dropping the link to regulator.18
[    3.603829] tpd12s015 encoder: GPIO lookup for consumer (null)
[    3.603834] tpd12s015 encoder: using device tree for GPIO lookup
[    3.603855] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[0]' - status (0)
[    3.603867] gpio gpiochip6: Persistence not supported for GPIO 10
[    3.603874] tpd12s015 encoder: GPIO lookup for consumer (null)
[    3.603878] tpd12s015 encoder: using device tree for GPIO lookup
[    3.603896] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[1]' - status (0)
[    3.603905] gpio gpiochip1: Persistence not supported for GPIO 30
[    3.603913] tpd12s015 encoder: GPIO lookup for consumer (null)
[    3.603918] tpd12s015 encoder: using device tree for GPIO lookup
[    3.603934] of_get_named_gpiod_flags: parsed 'gpios' property of node '/encoder[2]' - status (0)
[    3.603943] gpio gpiochip6: Persistence not supported for GPIO 12
[    3.604492] omapdss_hdmi5 58040000.encoder: Linked as a consumer to regulator.18
[    3.612250] omapdss_dss 58000000.dss: bound 58001000.dispc (ops dispc_component_ops)
[    3.620208] omapdss_dss 58000000.dss: bound 58040000.encoder (ops hdmi5_component_ops)
[    3.652164] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    3.658808] [drm] No driver support for vblank timestamp query.
[    3.667637] [drm] Enabling DMM ywrap scrolling
[    3.674661] Console: switching to colour frame buffer device 100x30
[    3.683033] omapdrm omapdrm.0: fb0: omapdrm frame buffer device
[    3.689629] [drm] Initialized omapdrm 1.0.0 20110917 for omapdrm.0 on minor 0
[    3.697139] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_keys/USER5[0]' - status (0)
[    3.697150] gpio gpiochip1: Persistence not supported for GPIO 20
[    3.697237] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_keys/USER4[0]' - status (0)
[    3.697246] gpio gpiochip1: Persistence not supported for GPIO 24
[    3.697371] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_keys/USER3[0]' - status (0)
[    3.697380] gpio gpiochip1: Persistence not supported for GPIO 28
[    3.697466] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_keys/USER2[0]' - status (0)
[    3.697475] gpio gpiochip1: Persistence not supported for GPIO 25
[    3.697559] of_get_named_gpiod_flags: parsed 'gpios' property of node '/gpio_keys/USER1[0]' - status (0)
[    3.697567] gpio gpiochip1: Persistence not supported for GPIO 23
[    3.697726] input: gpio_keys as /devices/platform/gpio_keys/input/input0
[    3.705614] hctosys: unable to open rtc device (rtc0)
[    3.711302] ALSA device list:
[    3.714522]   No soundcards found.
[    3.753076] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    3.761235] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    3.777109] devtmpfs: mounted
[    3.781336] Freeing unused kernel memory: 2048K
[    3.786052] Run /sbin/init as init process
[    4.130955] systemd[1]: System time before build time, advancing clock.
[    4.165784] systemd[1]: systemd 239 running in system mode. (+PAM -AUDIT -SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP -LIBCRYPTSETUP -GCRYPT -GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID -ELFUTILS +KMOD -IDN2 -IDN -PCRE2 default-hierarchy=hybrid)
[    4.187692] systemd[1]: Detected architecture arm.
[    4.234570] systemd[1]: Set hostname to <am57xx-evm>.
[    4.426788] systemd[1]: File /lib/systemd/system/systemd-journald.service:36 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
[    4.443986] systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)
[    4.665049] random: systemd: uninitialized urandom read (16 bytes read)
[    4.671741] systemd[1]: Reached target Remote File Systems.
[    4.702115] random: systemd: uninitialized urandom read (16 bytes read)
[    4.709162] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    4.751699] random: systemd: uninitialized urandom read (16 bytes read)
[    4.758849] systemd[1]: Listening on Journal Socket.
[    4.798297] systemd[1]: Mounting POSIX Message Queue File System...
[    4.832460] systemd[1]: Created slice User and Session Slice.
[    4.910256] random: crng init done
[    4.913720] random: 4 urandom warning(s) missed due to ratelimiting
[    5.056993] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[    5.341284] cmemk: loading out-of-tree module taints kernel.
[    5.347909] CMEMK module: reference Linux version 4.19.79
[    5.355384] allocated heap buffer 0x40500000 of size 0x100000
[    5.366566] cmemk initialized
[    5.378429] cryptodev: driver 1.9 loaded.
[    5.458508] usbcore: registered new interface driver usbfs
[    5.464949] usbcore: registered new interface driver hub
[    5.470361] usbcore: registered new device driver usb
[    5.492266] usbcore: registered new interface driver ftdi_sio
[    5.498080] usbserial: USB Serial support registered for FTDI USB Serial Device
[    6.242401] systemd-journald[108]: Received request to flush runtime journal from PID 1
[    6.428884] omap-rproc 58820000.ipu: ignoring dependency for device, assuming no driver
[    6.455812] omap-rproc 58820000.ipu: ignoring dependency for device, assuming no driver
[    6.516821] omap-rproc 58820000.ipu: assigned reserved memory node ipu1-memory@9d000000
[    6.548145] remoteproc remoteproc0: 58820000.ipu is available
[    6.605066] omap-rproc 55020000.ipu: ignoring dependency for device, assuming no driver
[    6.647493] omap-rproc 55020000.ipu: ignoring dependency for device, assuming no driver
[    6.661387] omap-rproc 55020000.ipu: assigned reserved memory node ipu2-memory@95800000
[    6.704379] remoteproc remoteproc1: 55020000.ipu is available
[    6.711284] omap-rproc 40800000.dsp: ignoring dependency for device, assuming no driver
[    6.755641] omap-rproc 40800000.dsp: ignoring dependency for device, assuming no driver
[    6.771481] omap-rproc 40800000.dsp: assigned reserved memory node dsp1-memory@99000000
[    6.799666] remoteproc remoteproc2: 40800000.dsp is available
[    6.839682] omap-rproc 41000000.dsp: ignoring dependency for device, assuming no driver
[    6.851515] omap-rproc 41000000.dsp: ignoring dependency for device, assuming no driver
[    6.879875] omap-rproc 41000000.dsp: assigned reserved memory node dsp2-memory@9f000000
[    6.892079] remoteproc remoteproc3: 41000000.dsp is available
[    6.916289] rtc-ds1307 2-006f: SET TIME!
[    6.932452] rtc-ds1307 2-006f: got IRQ 187
[    6.932762] rtc-ds1307 2-006f: read: 80 00 00 09 01 01 01
[    6.932770] rtc-ds1307 2-006f: read secs=0, mins=0, hours=0, mday=1, mon=0, year=101, wday=0
[    6.933819] rtc-ds1307 2-006f: mcp794xx_read_alarm, sec=0 min=0 hour=0 wday=0 mday=1 mon=0 enabled=0 polarity=0 irq=0 match=0
[    6.934118] rtc-ds1307 2-006f: read: 80 00 00 09 01 01 01
[    6.934125] rtc-ds1307 2-006f: read secs=0, mins=0, hours=0, mday=1, mon=0, year=101, wday=0
[    6.934133] rtc rtc0: alarm rollover: year
[    6.934431] rtc-ds1307 2-006f: read: 80 00 00 09 01 01 01
[    6.934438] rtc-ds1307 2-006f: read secs=0, mins=0, hours=0, mday=1, mon=0, year=101, wday=0
[    6.934731] rtc-ds1307 2-006f: char device (253:0)
[    6.934749] rtc-ds1307 2-006f: registered as rtc0
[    6.977491] at24 0-0050: GPIO lookup for consumer wp
[    6.977498] at24 0-0050: using device tree for GPIO lookup
[    6.977512] of_get_named_gpiod_flags: can't parse 'wp-gpios' property of node '/ocp/i2c@48070000/eeprom@50[0]'
[    6.977522] of_get_named_gpiod_flags: can't parse 'wp-gpio' property of node '/ocp/i2c@48070000/eeprom@50[0]'
[    6.977529] at24 0-0050: using lookup tables for GPIO lookup
[    6.977534] at24 0-0050: No GPIO consumer wp found
[    6.979881] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: GPIO lookup for consumer id
[    6.979888] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: using device tree for GPIO lookup
[    6.979900] of_get_named_gpiod_flags: can't parse 'id-gpios' property of node '/ocp/i2c@48070000/tps659038@58/tps659038_usb[0]'
[    6.979910] of_get_named_gpiod_flags: can't parse 'id-gpio' property of node '/ocp/i2c@48070000/tps659038@58/tps659038_usb[0]'
[    6.979917] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: using lookup tables for GPIO lookup
[    6.979922] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: No GPIO consumer id found
[    6.979928] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: GPIO lookup for consumer vbus
[    6.979932] palmas-usb 48070000.i2c:tps659038@58:tps659038_usb: using device tree for GPIO lookup
[    6.979942] of_get_named_gpiod_flags: can't parse 'vbus-gpios' property of node '/ocp/i2c@48070000/tps659038@58/tps659038_usb[0]'
[    6.979961] of_get_named_gpiod_flags: parsed 'vbus-gpio' property of node '/ocp/i2c@48070000/tps659038@58/tps659038_usb[0]' - status (0)
[    6.980003] gpio gpiochip3: Persistence not supported for GPIO 21
[    6.980192] at24 0-0050: 4096 byte 24c32 EEPROM, writable, 1 bytes/write
[    6.993908] rtc rtc1: 48070000.i2c:tps659038@58:tps659038_rtc: dev (253:1)
[    6.993919] palmas-rtc 48070000.i2c:tps659038@58:tps659038_rtc: rtc core: registered 48070000.i2c:tps659038@58:tps659038_rtc as rtc1
[    7.122185] Driver for 1-wire Dallas network protocol.
[    7.274010] remoteproc remoteproc0: powering up 58820000.ipu
[    7.279751] remoteproc remoteproc0: Booting fw image dra7-ipu1-fw.xem4, size 6884184
[    7.289567] virtio_rpmsg_bus virtio0: rpmsg host is online
[    7.289826] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3d
[    7.295183] remoteproc remoteproc0: registered virtio0 (type 7)
[    7.308199] remoteproc remoteproc0: remote processor 58820000.ipu is now up
[    7.331741] of_get_named_gpiod_flags: can't parse 'reset-gpios' property of node '/ocp/i2c@48070000/tlv320aic3104@18[0]'
[    7.331753] of_get_named_gpiod_flags: can't parse 'gpio-reset' property of node '/ocp/i2c@48070000/tlv320aic3104@18[0]'
[    7.331816] tlv320aic3x-codec 0-0018: Linked as a consumer to regulator.5
[    7.339614] tlv320aic3x-codec 0-0018: Linked as a consumer to regulator.6
[    7.353729] omap_rtc 48838000.rtc: char device (253:2)
[    7.353739] omap_rtc 48838000.rtc: registered as rtc2
[    7.371756] omap_hdq 480b2000.1w: OMAP HDQ Hardware Rev 0.:. Driver in Interrupt mode
[    7.442304] remoteproc remoteproc1: powering up 55020000.ipu
[    7.448000] remoteproc remoteproc1: Booting fw image dra7-ipu2-fw.xem4, size 3747220
[    7.456669] omap-iommu 55082000.mmu: 55082000.mmu: version 2.1
[    7.466171] ov490 4-0014: lte80 driver registered
[    7.476003] ov490 4-0014: parallel bus found!
[    7.482025] ov490 4-0014: Using 0 data lanes
[    7.557003] virtio_rpmsg_bus virtio1: rpmsg host is online
[    7.564739] virtio_rpmsg_bus virtio1: creating channel rpmsg-rpc addr 0x65
[    7.570256] remoteproc remoteproc1: registered virtio1 (type 7)
[    7.574244] virtio_rpmsg_bus virtio1: creating channel rpmsg-rpc addr 0x66
[    7.587694] remoteproc remoteproc1: remote processor 55020000.ipu is now up
[    7.596922] w1_master_driver w1_bus_master1: Attaching one wire slave 01.000000000000 crc 3d
[    7.610530] omap-des 480a5000.des: OMAP DES hw accel rev: 2.2
[    7.623214] omap-des 480a5000.des: will run requests pump with realtime priority
[    7.623228] w1_master_driver w1_bus_master1: Family 1 for 01.000000000000.3d is not registered.
[    7.858683] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[    7.965373] phy phy-4a084000.phy.3: Linked as a consumer to regulator.25
[    7.975288] vpe 489d0000.vpe: loading firmware vpdma-1b8.bin
[    7.975349] omap-sham 4b101000.sham: hw accel on OMAP rev 4.3
[    7.986819] phy phy-4a085000.phy.4: Linked as a consumer to regulator.25
[    8.094447] net eth1: initializing cpsw version 1.15 (0)
[    8.102621] vpe 489d0000.vpe: Device registered as /dev/video0
[    8.184717] omap-hdmi-audio omap-hdmi-audio.0.auto: snd-soc-dummy-dai <-> 58040000.encoder mapping ok
[    8.194400] omap-hdmi-audio omap-hdmi-audio.0.auto: ASoC: no DMI vendor name!
[    8.205594] omap-aes 4b500000.aes: OMAP AES hw accel rev: 3.3
[    8.219334] omap-aes 4b500000.aes: will run requests pump with realtime priority
[    8.232819] omap-aes 4b700000.aes: OMAP AES hw accel rev: 3.3
[    8.234042] Micrel KSZ9031 Gigabit PHY 48485000.mdio:02: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=48485000.mdio:02, irq=POLL)
[    8.238779] omap-aes 4b700000.aes: will run requests pump with realtime priority
[    8.283841] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[    8.298731] net eth0: initializing cpsw version 1.15 (0)
[    8.442566] Micrel KSZ9031 Gigabit PHY 48485000.mdio:01: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=48485000.mdio:01, irq=POLL)
[    8.464435] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    8.486322] libata version 3.00 loaded.
[    8.506895] [drm] Initialized pvr 1.17.4948957 20110701 for 56000000.gpu on minor 1
[    8.586258] of_get_named_gpiod_flags: can't parse 'simple-audio-card,hp-det-gpio' property of node '/sound0[0]'
[    8.586280] of_get_named_gpiod_flags: can't parse 'simple-audio-card,mic-det-gpio' property of node '/sound0[0]'
[    8.587884] asoc-simple-card sound0: tlv320aic3x-hifi <-> 48468000.mcasp mapping ok
[    8.596671] asoc-simple-card sound0: ASoC: no DMI vendor name!
[    8.946688] ahci 4a140000.sata: controller can't do 64bit DMA, forcing 32bit
[    8.958754] ahci 4a140000.sata: forcing port_map 0x0 -> 0x1
[    8.968465] ahci 4a140000.sata: AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl platform mode
[    8.977072] ahci 4a140000.sata: flags: ncq sntf pm led clo only pmp pio slum part ccc apst 
[    8.997916] scsi host0: ahci
[    9.001077] ata1: SATA max UDMA/133 mmio [mem 0x4a140000-0x4a1410ff] port 0x100 irq 83
[    9.122842] vip 48990000.vip: loading firmware vpdma-1b8.bin
[    9.331626] vip 48990000.vip: VPDMA firmware loaded
[    9.336620] vin3a: Port A: Using subdev ov490 4-0014 for capture
[    9.343511] ata1: SATA link down (SStatus 0 SControl 300)
[    9.348977] ov490 4-0014: enum code set!
[    9.354876] vin3a-0: device registered as video1
[    9.493011] remoteproc remoteproc2: powering up 40800000.dsp
[    9.499554] remoteproc remoteproc2: Booting fw image dra7-dsp1-fw.xe66, size 20483260
[    9.508839] omap-iommu 40d01000.mmu: 40d01000.mmu: version 3.0
[    9.514750] omap-iommu 40d02000.mmu: 40d02000.mmu: version 3.0
[    9.562281] virtio_rpmsg_bus virtio2: rpmsg host is online
[    9.562357] virtio_rpmsg_bus virtio2: creating channel rpmsg-proto addr 0x3d
[    9.567842] remoteproc remoteproc2: registered virtio2 (type 7)
[    9.586693] remoteproc remoteproc3: powering up 41000000.dsp
[    9.596367] remoteproc remoteproc3: Booting fw image dra7-dsp2-fw.xe66, size 20483260
[    9.613868] omap-iommu 41501000.mmu: 41501000.mmu: version 3.0
[    9.619760] omap-iommu 41502000.mmu: 41502000.mmu: version 3.0
[    9.646638] remoteproc remoteproc2: remote processor 40800000.dsp is now up
[    9.741069] virtio_rpmsg_bus virtio3: rpmsg host is online
[    9.741206] virtio_rpmsg_bus virtio3: creating channel rpmsg-proto addr 0x3d
[    9.753961] PVR_K: UM DDK-(4948957) and KM DDK-(4948957) match. [ OK ]
[    9.792470] remoteproc remoteproc3: registered virtio3 (type 7)
[    9.867470] remoteproc remoteproc3: remote processor 41000000.dsp is now up
[   10.560015] cpsw 48484000.ethernet eth0: Link is Up - 100Mbps/Full - flow control off
[   10.579616] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   12.036658] dwc3 48890000.usb: Failed to get clk 'ref': -2
[   12.067463] NET: Registered protocol family 45
[   12.094884] dwc3 488d0000.usb: Failed to get clk 'ref': -2
[   12.125098] rpmsg_rpc virtio1.rpmsg-rpc.-1.101: probing service dce-callback with src 1024 dst 101
[   12.167467] rpmsg_rpc virtio1.rpmsg-rpc.-1.101: published functions = 4
[   12.168066] rpmsg_rpc virtio1.rpmsg-rpc.-1.102: probing service rpmsg-dce with src 1025 dst 102
[   12.280988] rpmsg_rpc virtio1.rpmsg-rpc.-1.102: published functions = 9
[   12.358689] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[   12.375048] remoteproc remoteproc4: 4b234000.pru is available
[   12.394744] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 1
[   12.411026] pru-rproc 4b234000.pru: PRU rproc node pru@4b234000 probed successfully
[   12.442352] remoteproc remoteproc5: 4b238000.pru is available
[   12.448602] xhci-hcd xhci-hcd.1.auto: hcc params 0x0220f04c hci version 0x100 quirks 0x0000000002010010
[   12.463349] pru-rproc 4b238000.pru: PRU rproc node pru@4b238000 probed successfully
[   12.476255] xhci-hcd xhci-hcd.1.auto: irq 191, io mem 0x48890000
[   12.502356] remoteproc remoteproc6: 4b2b4000.pru is available
[   12.512707] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
[   12.521020] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.532964] pru-rproc 4b2b4000.pru: PRU rproc node pru@4b2b4000 probed successfully
[   12.543805] remoteproc remoteproc7: 4b2b8000.pru is available
[   12.549743] usb usb1: Product: xHCI Host Controller
[   12.559633] pru-rproc 4b2b8000.pru: PRU rproc node pru@4b2b8000 probed successfully
[   12.568034] usb usb1: Manufacturer: Linux 4.19.79-g77dfab56c6 xhci-hcd
[   12.578464] usb usb1: SerialNumber: xhci-hcd.1.auto
[   12.597954] hub 1-0:1.0: USB hub found
[   12.624132] hub 1-0:1.0: 1 port detected
[   12.633280] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[   12.638808] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 2
[   12.654197] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0 SuperSpeed
[   12.662082] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[   12.672295] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19
[   12.691137] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   12.700406] usb usb2: Product: xHCI Host Controller
[   12.705721] usb usb2: Manufacturer: Linux 4.19.79-g77dfab56c6 xhci-hcd
[   12.713994] usb usb2: SerialNumber: xhci-hcd.1.auto
[   12.722893] hub 2-0:1.0: USB hub found
[   12.728287] hub 2-0:1.0: 1 port detected
[   12.991656] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[   13.172005] usb 1-1: New USB device found, idVendor=0451, idProduct=8142, bcdDevice= 1.00
[   13.180383] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=1
[   13.190812] usb 1-1: SerialNumber: 1D0728410AF3
[   13.270326] hub 1-1:1.0: USB hub found
[   13.282599] hub 1-1:1.0: 4 ports detected
[   13.334508] usb 2-1: new SuperSpeed Gen 1 USB device number 2 using xhci-hcd
[   13.371955] usb 2-1: New USB device found, idVendor=0451, idProduct=8140, bcdDevice= 1.00
[   13.380535] usb 2-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   13.433198] hub 2-1:1.0: USB hub found
[   13.439986] hub 2-1:1.0: 4 ports detected
[   13.661641] usb 1-1.2: new low-speed USB device number 3 using xhci-hcd
[   13.816321] usb 1-1.2: New USB device found, idVendor=1bcf, idProduct=0007, bcdDevice= 0.14
[   13.825533] usb 1-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[   13.836801] usb 1-1.2: Product: USB Optical Mouse
[   13.981602] usb 1-1.3: new low-speed USB device number 4 using xhci-hcd
[   14.014288] input: USB Optical Mouse Mouse as /devices/platform/44000000.ocp/48880000.omap_dwc3_1/48890000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2/1-1.2:1.0/0003:1BCF:0007.0001/input/input1
[   14.032606] input: USB Optical Mouse as /devices/platform/44000000.ocp/48880000.omap_dwc3_1/48890000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.2/1-1.2:1.0/0003:1BCF:0007.0001/input/input2
[   14.049534] hid-generic 0003:1BCF:0007.0001: input: USB HID v1.10 Mouse [USB Optical Mouse] on usb-xhci-hcd.1.auto-1.2/input0
[   14.063120] usbcore: registered new interface driver usbhid
[   14.069007] usbhid: USB HID core driver
[   14.121177] usb 1-1.3: New USB device found, idVendor=413c, idProduct=2113, bcdDevice= 1.08
[   14.129762] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[   14.137972] usb 1-1.3: Product: Dell KB216 Wired Keyboard
[   14.234726] input: Dell KB216 Wired Keyboard as /devices/platform/44000000.ocp/48880000.omap_dwc3_1/48890000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.3/1-1.3:1.0/0003:413C:2113.0002/input/input3
[   14.323866] hid-generic 0003:413C:2113.0002: input: USB HID v1.11 Keyboard [Dell KB216 Wired Keyboard] on usb-xhci-hcd.1.auto-1.3/input0
[   14.359578] input: Dell KB216 Wired Keyboard System Control as /devices/platform/44000000.ocp/48880000.omap_dwc3_1/48890000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.3/1-1.3:1.1/0003:413C:2113.0003/input/input4
[   14.442399] input: Dell KB216 Wired Keyboard Consumer Control as /devices/platform/44000000.ocp/48880000.omap_dwc3_1/48890000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.3/1-1.3:1.1/0003:413C:2113.0003/input/input5
[   14.461091] hid-generic 0003:413C:2113.0003: input: USB HID v1.11 Device [Dell KB216 Wired Keyboard] on usb-xhci-hcd.1.auto-1.3/input1
[   16.442476] gpio gpiochip4: Persistence not supported for GPIO 4
[   16.910454] rtc-ds1307 2-006f: write secs=42, mins=35, hours=2, mday=5, mon=0, year=120, wday=0
[   16.910464] rtc-ds1307 2-006f: write: c2 35 02 09 05 01 20
[   16.911131] rtc-ds1307 2-006f: read: c2 35 02 29 05 21 20
[   16.911141] rtc-ds1307 2-006f: read secs=42, mins=35, hours=2, mday=5, mon=0, year=120, wday=0
[   33.751615] aic_dvdd_fixed: disabling
[  136.069833] NET: Registered protocol family 15
[  136.147156] Initializing XFRM netlink socket
[  307.446845] gpio gpiochip4: Persistence not supported for GPIO 12
[  311.478800] gpio gpiochip4: Persistence not supported for GPIO 11
[  357.657142] vin3a-0: vip_open
[  357.657165] vin3a: vip_init_port: g_mbus_fmt subdev mbus_code: 3013 fourcc:GBRG size: 160x160
[  357.657177] vin3a: calc_format_size: fourcc:GBRG size: 160x160 bpl:160 img_size:25600
[  357.657184] vin3a-0: init_stream fourcc:GBRG size: 160x160 bpl:160 img_size:25600
[  357.657190] vin3a-0: init_stream vpdma data type: 0x27
[  357.657197] vin3a-0: vip_init_stream: stream instance 0x00000000ecf9c000
[  357.657213] video1: VIDIOC_QUERYCAP: driver=vip, card=vip, bus=platform:vip2:vin3a:stream0, version=0x0004134f, capabilities=0x85200001, device_caps=0x05200001
[  357.658192] vin3a-0: s_fmt input fourcc:GBRG size: 160x160 bpl:0 img_size:0
[  357.658199] vin3a-0: try_fmt fourcc:GBRG size: 160x160
[  357.658207] vin3a-0: try_fmt loop:0 fourcc:GBRG size: 160x160
[  357.658213] vin3a-0: try_fmt loop:0 found new larger: 160x160
[  357.658220] vin3a-0: try_fmt loop:0 found at least larger: 160x160
[  357.658225] vin3a-0: try_fmt loop:0 found new best: 160x160
[  357.658230] vin3a-0: try_fmt loop:0 found direct match: 160x160
[  357.658237] vin3a: calc_format_size: fourcc:GBRG size: 160x160 bpl:160 img_size:25600
[  357.658244] vin3a-0: s_fmt try_fmt fourcc:GBRG size: 160x160 bpl:160 img_size:25600
[  357.658251] vin3a-0: s_fmt fourcc:GBRG size: 160x160 bpl:160 img_size:25600
[  357.658257] vin3a-0: s_fmt pix_to_mbus mbus_code: 3013 size: 160x160
[  357.658261] vin3a-0: s_fmt subdev fmt mbus_code: 3013 size: 160x160
[  357.658267] vin3a-0: s_fmt vpdma data type: 0x27
[  357.658272] video1: VIDIOC_S_FMT: type=vid-cap, width=160, height=160, pixelformat=GBRG, field=none, bytesperline=160, sizeimage=25600, colorspace=1, flags=0x0, ycbcr_enc=0, quantization=0, xfer_func=0
[  357.658619] vin3a-0: g_fmt fourcc:GBRG code: 3013 size: 160x160 bpl:160 img_size:25600
[  357.658626] vin3a-0: g_fmt vpdma data type: 0x27
[  357.658631] video1: VIDIOC_G_FMT: type=vid-cap, width=160, height=160, pixelformat=GBRG, field=none, bytesperline=160, sizeimage=25600, colorspace=1, flags=0x0, ycbcr_enc=0, quantization=0, xfer_func=0
[  357.658788] vin3a-0: get 8 buffer(s) of size 25600 each.
[  357.659137] videobuf2_common: __setup_offsets: buffer 0, plane 0 offset 0x00000000
[  357.673247] videobuf2_common: __setup_offsets: buffer 1, plane 0 offset 0x00007000
[  357.681212] videobuf2_common: __setup_offsets: buffer 2, plane 0 offset 0x0000e000
[  357.689214] videobuf2_common: __setup_offsets: buffer 3, plane 0 offset 0x00015000
[  357.701398] videobuf2_common: __setup_offsets: buffer 4, plane 0 offset 0x0001c000
[  357.711044] videobuf2_common: __setup_offsets: buffer 5, plane 0 offset 0x00023000
[  357.719223] videobuf2_common: __setup_offsets: buffer 6, plane 0 offset 0x0002a000
[  357.726931] videobuf2_common: __setup_offsets: buffer 7, plane 0 offset 0x00031000
[  357.734607] videobuf2_common: __vb2_queue_alloc: allocated 8 buffers, 1 plane(s) each
[  357.742487] video1: VIDIOC_REQBUFS: count=8, type=vid-cap, memory=mmap
[  357.742583] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=0, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x0, length=25600
[  357.742607] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.742667] videobuf2_common: vb2_mmap: buffer 0, plane 0 successfully mapped
[  357.750298] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=1, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x7000, length=25600
[  357.750346] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.750464] videobuf2_common: vb2_mmap: buffer 1, plane 0 successfully mapped
[  357.757804] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=2, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0xe000, length=25600
[  357.757836] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.757896] videobuf2_common: vb2_mmap: buffer 2, plane 0 successfully mapped
[  357.765269] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=3, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x15000, length=25600
[  357.765302] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.765505] videobuf2_common: vb2_mmap: buffer 3, plane 0 successfully mapped
[  357.772797] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=4, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x1c000, length=25600
[  357.772830] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.772885] videobuf2_common: vb2_mmap: buffer 4, plane 0 successfully mapped
[  357.780285] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=5, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x23000, length=25600
[  357.780313] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.780369] videobuf2_common: vb2_mmap: buffer 5, plane 0 successfully mapped
[  357.787766] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=6, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x2a000, length=25600
[  357.787791] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.787854] videobuf2_common: vb2_mmap: buffer 6, plane 0 successfully mapped
[  357.795101] video1: VIDIOC_QUERYBUF: 00:00:00.00000000 index=7, type=vid-cap, flags=0x00002000, field=any, sequence=0, memory=mmap, bytesused=0, offset/userptr=0x31000, length=25600
[  357.795122] timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
[  357.795168] videobuf2_common: vb2_mmap: buffer 7, plane 0 successfully mapped
[  357.802553] videobuf2_common: vb2_core_qbuf: qbuf of buffer 0 succeeded
[  357.809307] videobuf2_common: vb2_core_qbuf: qbuf of buffer 1 succeeded
[  357.816255] videobuf2_common: vb2_core_qbuf: qbuf of buffer 2 succeeded
[  357.822997] videobuf2_common: vb2_core_qbuf: qbuf of buffer 3 succeeded
[  357.829671] videobuf2_common: vb2_core_qbuf: qbuf of buffer 4 succeeded
[  357.836460] videobuf2_common: vb2_core_qbuf: qbuf of buffer 5 succeeded
[  357.843186] videobuf2_common: vb2_core_qbuf: qbuf of buffer 6 succeeded
[  357.849928] videobuf2_common: vb2_core_qbuf: qbuf of buffer 7 succeeded
[  357.856850] vin3: vip_set_slice_path:
[  357.856857] vin3: vip_set_slice_path: DATA_PATH_SELECT(0000010C): 80008000
[  357.856861] vin3: vip_set_slice_path:
[  357.856868] vin3: vip_set_slice_path: DATA_PATH_SELECT(0000010C): 40008000
[  357.857795] vin3a: vip_set_crop_parser: 8 bit raw detected, adjusting width to 80
[  357.857803] vin3a-0: add_out_dtd: 8 bit raw detected, adjusting width to 80
[  357.857815] vin3a-0: vip_load_vpdma_list_fifo: start_dma vb2 buf idx:0
[  357.859647] vin3a-0: vip_load_vpdma_list_fifo: start_dma vb2 buf idx:1
[  357.860780] videobuf2_common: vb2_core_streamon: successful
[  357.866994] video1: VIDIOC_STREAMON: type=vid-cap
[  357.871703] videobuf2_common: __vb2_wait_for_done_vb: will sleep waiting for buffers
[  360.454543] videobuf2_common: __vb2_wait_for_done_vb: sleep was interrupted
[  360.461985] vin3a-0: vip_release
[  360.461998] vin3a-0: vip_stop_streaming:
[  360.462008] vin3: vip_set_slice_path:
[  360.462019] vin3: vip_set_slice_path: DATA_PATH_SELECT(0000010C): 80008000
[  360.462026] vin3: vip_set_slice_path:
[  360.462035] vin3: vip_set_slice_path: DATA_PATH_SELECT(0000010C): 40008000
[  360.462050] vin3a-0: Clear channel no: 38
[  360.462126] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 0
[  360.469146] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 1
[  360.476235] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 2
[  360.483356] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 3
[  360.490371] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 4
[  360.497399] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 5
[  360.504449] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 6
[  360.511462] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 7
[  360.518499] vin3a-0: vip_release_stream: stream instance 0xdcf57f1aecf9c000
[  360.518505] vin3a: vip_release_port: port instance 0xdcf57f1aec4b1840
[ 1760.411588] usb 1-1.1: new high-speed USB device number 5 using xhci-hcd
[ 1760.542050] usb 1-1.1: New USB device found, idVendor=0781, idProduct=5567, bcdDevice= 1.00
[ 1760.550454] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1760.558438] usb 1-1.1: Product: Cruzer Blade
[ 1760.563064] usb 1-1.1: Manufacturer: SanDisk
[ 1760.567368] usb 1-1.1: SerialNumber: 4C530000100610115142
[ 1760.639794] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[ 1760.646722] scsi host1: usb-storage 1-1.1:1.0
[ 1760.652680] usbcore: registered new interface driver usb-storage
[ 1760.665333] usbcore: registered new interface driver uas
[ 1761.673023] scsi 1:0:0:0: Direct-Access     SanDisk  Cruzer Blade     1.00 PQ: 0 ANSI: 6
[ 1761.684901] sd 1:0:0:0: [sda] 60088320 512-byte logical blocks: (30.8 GB/28.7 GiB)
[ 1761.694841] sd 1:0:0:0: [sda] Write Protect is off
[ 1761.699692] sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 1761.700037] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1761.730747]  sda:
[ 1761.736943] sd 1:0:0:0: [sda] Attached SCSI removable disk
[ 1779.990607]  sda:

  • Hi Krishna,

    The pinmux should be configured once in mux_data.h in the u-boot. No need of adding them in dts files.
    You can double check if you have the right pinmux set in u-boot using md command
    or using devmem2 tool in the Linux kernel.

    Best Regards,
    Keerthy

  • Hello Keerthy,

    Thanks for the reply.

    I checked the pinmux using devmem2 and all pins all duly checked.

    I found that pinmuxing in u-boot is ok.

    ex:-

    devmem2 0x4A0034BC

    Read at address 0x4A0034BC (0XB6F424BC): 0X00040102

    in technical reference manual

    3:0 GPMC_CS3_MUXMODE

    0x0: gpmc_cs3
    0x1: qspi1_cs1
    0x2: vin3a_clk0
    0x3: vout3_clk
    0x5: gpmc_a1
    0xE: gpio2_21
    0xF: Driver off


    So I sure that there is no issue with pinmuxing.

    cat /proc/interrupts | grep vip

    does not give any interrupt yet.

    I am not sure but it may be due to wrong media bus configuration done in v4l2 sub driver

    which I defined in 0v490.c

    Please see my kernel log and 0v490.c file which I attached in previous post.

    I would be grateful to you If any suggestion will take me out.

     

     

    Regards

    Krishna Vashistha

    Accurate Optoelectroics Pvt. Ltd.

  • Dear Keerthy,

    I am waiting for your response.

    If you need any further information about the problem, I can provide to you.

    Please look into this otherwise I will have to close this project.

    Regards

    Krishna Vashistha

    Accurate Optoelectronics Pvt. Ltd.

  • Hi Krishna,

    We are reaching out to the expert on VIP. Thanks for your patience.

    Best Regards,
    Keerthy

  • Hi Krishna,

    Application stuck at DQBUF is most common symptom of the failure.

    Please refer to this application note on various techniques to debug the issues https://www.ti.com/lit/an/spracd3/spracd3.pdf

    We will have more info when you have tried section 4.1, 4.2, etc to root cause the problem.

    Regards,

    Nikhil D

  • Hello Nikhil,

    Thanks for the response.

    According to section 4.1 defined in spracd3.pdf

     

    When I read the following:-

    1. parser size register 0x48995530, I got 0x00000000. (may be this causes an issue)

    2. parser Config Register 0x48995504, got 0x004038c4.

    I see in TRM

    DISCRETE_BASIC_MODE is set to 1.

    ACTIVID_POLARITY is set to 1.

    HSYNC_POLARITY is set to 1.

    VSYNC_POLARITY is set to 1.

    3. hexdump-b /proc/device-tree/ocp/i2c@480720000/ov490@14/port/endpoint@0/pclk-sample

    0000000 000  000 000 001

    0000004

    4. hexdump-b /proc/device-tree/ocp/i2c@480720000/ov490@14/port/endpoint@0/bus-width

    0000000 000  000 000 010

    0000004

    5. hexdump-b /proc/device-tree/ocp/i2c@480720000/ov490@14/port/endpoint@0/hsync-active

    0000000 000  000 000 001

    0000004

    6. hexdump-b /proc/device-tree/ocp/i2c@480720000/ov490@14/port/endpoint@0/vsync-active

    0000000 000  000 000 001

    0000004

    7. hexdump-b /proc/device-tree/ocp/i2c@480720000/ov490@14/port/endpoint@0/channels

    0000000 000  000 000 001

    0000004

    4.2.1 VPDMA List Status

    //VIP_PID//

    devmem2 0x4899d000

    Read at address 0x4899d000 : 0x4D0001B8

    //VIP_LIST_ADDR//

    devmem2 0x4899d004

    Read at address 0x4899d004 : 0x949B4940


    //VIP_LIST_ATTR//

    devmem2 0x4899d008  

    Read at address 0x4899d008 : 0x00080001

    //VIP_LIST_STAT_SYNC//

    devmem2 0x4899D00C

    Read at address 0x4899d00C : 0x00000000 (should it be non zero ?)

    Now let me know if any issue in above registers configuration.

    I want to know one more thing

    My sensor gives (80x80) 8bit parallel data  (1 pixel =  2 byte) ,vsysnc, hsysnc where pixel clock is being driven by external crystal

    I configured in 0v490.c

    .code        = MEDIA_BUS_FMT_SGBRG8_1X8,

    .colorspace    = V4L2_COLORSPACE_SMPTE170M,

    .coplaner     = 0,

    .fourcc     = V4L2_PIX_FMT_SGBRG8,

     

    is it configured right?

    Should I define image width 80 or 160? because the pixels per line will be 160.

    Thank you.

    Regards

    Krishna Vashistha

  • Hi Krishna,

    I am assuming that the address you have chosen is the right one for the VIP port that you are connecting your camera to.

    Make sure it is indeed the correct one. Considering this is correct,

    Yes, your parser configuration is not done correctly. VIP_PORT_A

    Please review if the parser config register matches with what you have described in the device tree and also if it matches with the exact hardware you have.

    Note that, if you specify RGB, bus width cannot be 16bit. You should specify YUV as the format.

    Also, what you are doing is very wrong. You should be writing your own driver for the camera, which does all the correct i2c transactions in kernel and implements the format negotiation ops, etc.

    Regards,

    Nikhil D

  • Dear Nikhil,

    Thank you for reply.

    Yes, the register address which I used, its correspond to my device port.

    I understand that parser configuration is not set correctly.

     

    According to my sensor output, I can only configure hsync/ vsync polarity , pclk sample and bus-width.

    If these are getting assigned in dts file but not matches with parser config register than what should be done?

    As per your statement

    Also, what you are doing is very wrong. You should be writing your own driver for the camera, which does all the correct i2c transactions in kernel and implements the format negotiation ops, etc.

    As I posted earlier I am using separate user space i2c application to initialize the sensor.

    The sensor image property is fixed and static (width = 80 , height = 80 , monochrome -8bit)

    no need to change by user space application.

    That's why I only changed g_fmt() s_fmt () in 0v490.c driver.

    If I do all i2c transactions from kernel driver, will it solve the problem?

    Regards

    Krishna Vashistha

  • Hi Krishna,

    A kernel driver is supposed to handle all the hardware related stuff. That's why my recommendataion is to write a proper kernel driver, with no dependency on userspace. That is the right way to implement.

    Regarding your issue, you mentioned that the data is 8bit. Then why are you setting the bus-width to 16

    Is the sensor actually having d[0] to d[15] data lines?

    If so, your format is wrong. You should be returning YUV format instead of RGB format

    Regards,

    Nikhil D

  • Hello Nikhil,

    As per your recommendation I am sending all i2c commands through v4l2-subdriver.

    My sensor data lines are d[0] to d[7] and I am taking bus-width  = 8 in dts.

    Pixel format is get corrected to YUYV.

    I checked on DSO to verify the pclk,hsync,vsync according to sensor document.

    Still the same problem occurred.

    do not get anything in parser size register.

    devmem2 0x48995530

    Read at address 0x48995530 : 0x00000000

     

    I am attaching the screenshot of DSO for your convenience.

    The yellow line is pclk, pink one is vsync and blue is hsync.

    Output wave-forms are correct as per sensor document.

    What would be the another reason to obtain parser size register as 0x00000000?

    Thank you.

    Regards

    Krishna Vashistha

  • Hello Nikhil,

    We are waiting for your valuable response.

    Kindly make us correct if anything happened wrong.

    Thank you

    Regards

    Krishna Vashistha

  • Hi Krishna,

    Please confirm results of the following:

    1. You have run the probe script to check that the pinmux is not an issue.

    2. You have understood and put the right device properties in kernel DT

    3. You have checked the parser config register and it is programmed as per your expectation.

    Nikhil Devshatwar

  • Hello Nikhil,

    I have checked once again all the following:-

    1 Pinmux is not a problem, muxmode is set correctly.

    2. Device tree format is right but I assume, capture may fail due to set wrong polarity of hsync,vsysnc and pclk-sample.

    3.Yes, parser config register is set correctly and it is according to programmed parameters.

    I attached the DSO image in my previous post.

    where the vsync is skewed before the hsync, can VIP parser take input in this format?

    only parser size register is 0x00000000.

    In vip,c the default minimum width and height was 128 where I changed to min width-height = 80.

    Is vip capable to capture low resolution frame?

    In VIP documentation

     

    Driver Usage

    Loading ti-vip

    If built as a module, you need to load all the v4l2-common, videobuf2-core and videobuf2-dma-contig modules before ti-vip will start.

    I do not get yet the above mentioned modules (.ko files).

    I found only .o files in /drivers/media/v4l2-core

    Thank you

    Regards

    Krishna Vashistha

  • Hi Krishna,

    From software side, there is a single register that is important. - The parser configuration register.

    If you are confident that the parser register value matches with your expectation, then I don't know what's the issue.

    If the parser is configured correctly, frame size will be detected correctly.

    Make sure you review each and every bit and understand if it is required or not.

    Regards,

    Nikhil D

  • Hello Nikhil,

    Thank you for the reply.

    Now I have understood the importance of parser register and it is true to set it correctly.

    Still the problem is, I don't know how to set the bit according to my sensor synchronization signals.

    I read in TRM  9.4.5.19 Discrete Sync Signals

    There are lots of sysnc signal defined like hblink,vblink,hsync,vysnc,activd,fid

    but I have only two from sensor vsync ,hsync and pclk.

    It is clear that my vsync is skewed before the hsync. so

    should I set FD_SKEW_PRECOUNT/ POSTCOUNT bit.

    Please suggest a little bit more...!!!

    Regards

    Krishna Vashistha

  • Hello Nikhil,

    Greetings....!!!!

    I believe that right parser configuration will set the parser size register correctly.

    I am unable to set parser config register according to my sensor sync output.

    I also tried different sync mode defined in TRM.

    But I think, there should be interrupt line captured by vip, which I don't get yet.

    root@am57xx-evm:~# cat /proc/interrupts | grep vip

    root@am57xx-evm:~#

     

    Is it depends on right parser config register too ?

    It is my request to you, If I provide sensor sync details (clock signals)

    and you would help us to make right parser config register.

    We are very grateful to you.

    Thank You.

     

    Regards

    Krishna Vashistha

  • Hi Krishna,

    You dont really require to set FID Skew field for progressive inputs, i guess, which is likely the case.

    You just need to set

    SYNC_TYPE = Depending on your input format 

    USE_ACTVID_HSYNC_N = 0

    DISCRETE_BASIC_MODE = 1

    And then polarity of the HS, VS and pixel clock.

    That should be good enough for the parser to detect the input . 

    Regards,

    Brijesh

  • Hello Brijesh,

    Thank you for the reply.

    I set the suggested bits  as

    USE_ACTVID_HSYNC_N = 0

    DISCRETE_BASIC_MODE = 1

    and I set vsync_polarity = 1 , hsync = 1, pclk = 0

    still not getting the frames.

    According to TRM.

    If select DISCRETE_BASIC_MODE = 1, it says

    "1= Basic Discrete Mode. When using hsync with Hsync
    Style Capture operates as follows: - The last line of active
    video ends on the pixel clock cycle where VSYNC
    transitions from inactive to active. - FID pin value is
    captured on this cycle and is used for the next field. - FID
    detection by VSYNC skew is not allowed"

     


    My case is opposite for vsync.

    the last line of hsync goes high to low with vsync high to low.

    Please see the attached document regarding sensor clock diagram.

    Now my Question is:-

    1. Do I invert the vsync to match the condition?

    2. There is no external FID pin coming out from sensor (to change the field or frame), Should I make it

    by using external hardware logic?

    Sensor_ dataFomat.pdf

    Thank you again...!!!!

    Regards

    Krishna Vashistha

  • Hello Brijesh,

    In progressive video format, data gets captured line by line i.e. hsync (line valid) where vsync (frame valid) is active high

    for a single image. 

    There might be some horizontal blanking pixels get captured along the active line.

    1. Should I set the Image width in v4l2 sub driver with considering  blanking pixel?

    example:

    If sensor image width is 80 along with 17 H_blanking pixel

    Should I take width as 80 + 17?

    2. Is there need of any other cropping feature by v4l2-sub driver or any other method

    to take out only active field?

    Waiting for your response.

    Thank you.

    Regards

    Krishna Vashistha

  • Hi Krishna,

    I am not sure about the V4L2 implementation, but yes, there is a cropping module in VIP parser, which can be used to remove the blanking data, both horizontal as well as vertical data.

    If you dont enable cropping in the parser, then yes, VIP will capture entire including horizontal blanking, when hsync input is used.. So yes, you need to allocate extra buffer and configure it to capture entire line. 

    Btw, is the horizontal blanking available at the start of the line or end of line? 

    Rgds,

    Brijesh

  • Hello Brijesh,

    Thank you for the reply.

    I am assuming that, at each line (width=80)  of active pixel there is a 17  H_pixel forward to it

    and it appears in every line.

    the last line of a frame where hsync is going inactive to active with vsync inactive to active at same pixel clock.

    So I assume, there will not be any vertical blanking pixels.

    Should I use width = 80 +17

    height = 80

    ?

    Regards

    Krishna Vashistha

  • Hi Krishna,

    ok, all data except when vsync is active will be captured. If you want to remove horizontal blanking, then you need to enabled cropping module in VIP Parser. I am not sure about V4L2, please check the documentation and see if it is supported. 

    Regards,

    Brijesh

  • Hello Brijesh,

    As per your statement....

    ok, all data except when vsync is active will be captured.

     

    In my case [sensor default synchronization - figure (a) ]

    vsync is active high throughout the complete image and hsync toggles in between vsync high to give line data.


     

    so I think my active data is not getting stored in active buffer, may be it is going into ancillary data buffer.

    Now I am just inverting vsync using NOT gate hardware IC, see figure (b)

     

    The above synchronization pattern (figure b) is quite similar to TRM hsync-vsync pattern.

    But image is not captured.

    I set in dts

    vsync-active = 1;

    hsync-active = 1;

    pclk-sample = 1;

    Let me know If I am going in wrong direction.

    One thing which I not mentioned earlier, sensor gives data at 50 hz, is it ok with vip driver?

    Can I use ACTIVD style capture instead of HSYNC? to avoid blanking pixels.

    It is defined in documentation.

    HSYNC and Discrete Basic Mode set as 1 are hard coded in the driver and not controlled through dts entries.

    VIP driver register settings will need changes if the signals used for capture are DE (ACTVID) and/or Discrete Basic Mode set as 0.

     

    Should I change in somewhere in vip driver?

     

    Warmly thankful to you...!!!

    Regards

    Krishna Vashistha

  • Hi Krishna,

    In the first diagram, yes, VIP will capture data when vsync is low, so if you dont have any hsync toggling during vsync is low, vip will not detect anything. You could change VIP setting to make vsync active low. In this case, VIP will capture when vsync is high. 

    Yes, you could change to DE signal, instead of HS signal. Please check if DE input signal is connected and then you could change it in the VIP parser register.

    Regards,

    Brijesh

  • Hello Brijesh,

    Thanks for the quick response.

    You mean to say I should use vsync-active = 0 for figure (a) , right?

    and what about 50 hz for vip?

    Regards

    Krishna Vashistha

  • Krishna,

    Yes, it should be fine. VIP is just a port, so does not care about 50fps, as long as pixel clock is within supported limit.. 

    Regards,

    Brijesh

  • Hello Brijesh,

    After doing lots of activity we are able to capture data.

    Our 80x80 sensor is working on processor. Although we used ACTIVD style capture

    to get only valid data.

    The no of pixels are being captured in buffer = 12800 = 80x80x2.

    which is accordingly to our expectation.

    Now the problem is we are not getting actual raw pixel value.

    Our sensor gives data in 8 bit parallel bus, where MSB comes first and then LSB.

    pixel information will be  14 bit.

    Each 8 bit raw count exceeds  255.

    Currently we select code = media_bus_fmt_sbggr8_1x8 and colorspace = V4L2_COLORSPACE_SMPTE170M.

     

    Please update us if we select wrong format and anything is missing from our side.

    Thank you so much to be with us every time.

    Regards

    Krishna Vashistha

  • Hi Krishna,

    Do you mean pixel size is 14 bits, but it is sent out over two clock cycles over 8bit interface? ie first 8bits on first clock cycle and next 6bits on next clock cycle, with remaining 2bits invalid?

    If this is correct, then you could still get the correct data in memory. You could treat input data as YUV422, dont enable any of the intermediate modules in the VIP path and store the output VIP as UYVY (U in lower byte) format. You would then get complete 14bits in 16bit container. 

    Rgds,

    Brijesh

  • Hello Brijesh,

    Yes, pixel size is 14 bit and sent out over two clock cycles over 8 bit.

    dont enable any of the intermediate modules in the VIP path and store the output VIP as UYVY (U in lower byte) format.

    What does it mean by intermediate modules?

     

    Should I use below format?

    .code        = MEDIA_BUS_FMT_UYVY8_2X8,
    .colorspace    = V4L2_COLORSPACE_SMPTE170M,

     

    Regards

    Krishna Vashistha

  • Hi Krishna,

    As i said earlier, i could help from VIP module point of view, i am not sure about V4L2 driver. 

    So i would say, yes, lets try MEDIA_BUS_FMT_UYVY8_2X8. Colorspace should not mater, as this format does not require any conversion.

    Rgds,

    Brijesh

  • Hello Brijesh,

    Thank you so much to be with us.

    Thanks to entire team.

    Regards

    Krishna Vashistha