rk3288板上添加hdmiin功能

     由于公司买的板子,供应商nb轰轰不给开源,自己拿着老掉牙的Android源码一点点添加功能,以下就是添加hdmiin功能辛酸泪记录史。

(1)hdmiin接口使用tc358749芯片转换。

添加tc358749驱动源码,firefly官网上Android系统源码已经开源,可以在里面找到tc358749.c/tc358749.h源码,在/kernel/driver/media/video/rk_camsys/路径下。

驱动添加好之后,修改设备树文件,找到板子配套dts文件,我这个是rk3288-tb_8846.dts。

由于hdminin数据走i2c通道,所以把tc358749节点挂在i2c上,套路了供应商是i2c4通道。下面就是配置引脚,引脚配置需要根据电路图设计,而拿不到电路图的我在完好的板子上,利用“cat sys/kernel/debug/gpio”命令找到hdmiin成功申请gpio引脚。最终配置如下:

tc358749@0f {

        compatible = "rockchip,tc359849";

        reg = <0x0f>;

        gpio-power = <&gpio7 GPIO_C5 GPIO_ACTIVE_HIGH>;

        gpio-stanby = <&gpio7 GPIO_A4 GPIO_ACTIVE_HIGH>;

        gpio-reset = <&gpio8 GPIO_B0 GPIO_ACTIVE_HIGH>;

        gpio-int = <&gpio8 GPIO_A7 GPIO_ACTIVE_HIGH>;

        status = "okay";

};

经启动hdmiin应用程序,dmesg命令记录,测试设备树和驱动文件连接成功,驱动成功完成探测函数。

(2)此时,hdmiin应用程序打开,闪退。

经“adb wait-for-usb-device shell dmesg”命令,打印开机内核log。

发现出现“iommu status not consistent,check the dts file!”错误,经检查源码,发现vpu节点iommu未使能,打开rk3288.dtsi设备树文件,修改vpu节点iommu参数。

(3)此时,打开hdmiin应用程序,显示黑屏。

因为hdmiin做成一个camera接口,所以经过hal层。经“adb shell logcat”命令打印Android系统开机log,发现有多个camera设备。如下:

D/CameraHal(  188): ParserSensorInfo(46): SensorName(OV5648)

D/CameraHal(  188): ParserSensorInfo(46): SensorName(OV2659)

D/CameraHal(  188): ParserSensorInfo(46): SensorName(GS8604)

D/CameraHal(  188): ParserSensorInfo(46): SensorName(IMX214)

D/CameraHal(  188): ParserSensorInfo(46): SensorName(TC358749XBG)等等。。。

找到/hardware/rockchip/camera/Config/下cam_board_rk3288.xml文件,除TC358749XBG外camera设备全部屏蔽掉。

并且根据电路板设计修改tc358749的sensor参数:

<CamDevie>
            <HardWareInfo>
                <Sensor>
                    <SensorName name="TC358749XBG" ></SensorName>
                    <SensorDevID IDname="CAMSYS_DEVID_SENSOR_1A"></SensorDevID>   //id name
                    <SensorHostDevID busnum="CAMSYS_DEVID_MARVIN" ></SensorHostDevID>
                    <SensorI2cBusNum busnum="4"></SensorI2cBusNum>   //i2c通道
                    <SensorI2cAddrByte byte="2"></SensorI2cAddrByte>     //i2c地址长度
                    <SensorI2cRate rate="100000"></SensorI2cRate>
                    <SensorMclk mclk="27000000"></SensorMclk>
                    <SensorAvdd name="NC" min="0" max="0"></SensorAvdd>
                    <SensorDovdd name="NC" min="18000000" max="18000000"></SensorDovdd>
                    <SensorDvdd name="NC" min="0" max="0"></SensorDvdd>
                    <SensorGpioPwdn ioname="NC" active="0"></SensorGpioPwdn>
                    <SensorGpioRst ioname="NC" active="0"></SensorGpioRst>
                    <SensorGpioPwen ioname="NC" active="1"></SensorGpioPwen>
                    <SensorFacing facing="back"></SensorFacing>
                    <SensorInterface interface="MIPI"></SensorInterface>
                    <SensorMirrorFlip mirror="0"></SensorMirrorFlip>
                    <SensorOrientation orientation="0"></SensorOrientation>
                    <SensorPowerupSequence seq="1234"></SensorPowerupSequence>
                    <SensorFovParemeter h="60.0" v="60.0"></SensorFovParemeter>
                    <SensorAWB_Frame_Skip fps="0"></SensorAWB_Frame_Skip>
                   <SensorPhy phyMode="CamSys_Phy_Mipi" lane="4"  phyIndex="0" sensorFmt="CamSys_Fmt_Yuv422_8b">

</SensorPhy>  //mipi通道
                </Sensor>
                <VCM>
                    <VCMDrvName name="NC"></VCMDrvName>
                    <VCMName name="NC"></VCMName>
                    <VCMI2cBusNum busnum="0"></VCMI2cBusNum>
                    <VCMI2cAddrByte byte="0"></VCMI2cAddrByte>
                    <VCMI2cRate rate="0"></VCMI2cRate>
                    <VCMVdd name="NC" min="0" max="0"></VCMVdd>
                    <VCMGpioPwdn ioname="NC" active="0"></VCMGpioPwdn>
                    <VCMGpioPower ioname="NC" active="0"></VCMGpioPower>
                    <VCMCurrent start="0" rated="100" vcmmax="100" stepmode="4"  drivermax="100"></VCMCurrent>
                </VCM>
                <Flash>
                    <FlashName name="NC"></FlashName>
                    <FlashI2cBusNum busnum="0"></FlashI2cBusNum>
                    <FlashI2cAddrByte byte="0"></FlashI2cAddrByte>
                    <FlashI2cRate rate="0"></FlashI2cRate>
                    <FlashTrigger ioname="NC" active="0"></FlashTrigger>
                    <FlashEn ioname="NC" active="0"></FlashEn>
                    <FlashModeType mode="1"></FlashModeType>
                    <FlashLuminance luminance="0"></FlashLuminance>
                    <FlashColorTemp colortemp="0"></FlashColorTemp>
                </Flash>
            </HardWareInfo>
            <SoftWareInfo>
                <AWB>
                    <AWB_Auto support="0"></AWB_Auto>
                    <AWB_Incandescent support="0"></AWB_Incandescent>
                    <AWB_Fluorescent support="0"></AWB_Fluorescent>
                    <AWB_Warm_Fluorescent support="0"></AWB_Warm_Fluorescent>
                    <AWB_Daylight support="0"></AWB_Daylight>
                    <AWB_Cloudy_Daylight support="0"></AWB_Cloudy_Daylight>
                    <AWB_Twilight support="0"></AWB_Twilight>
                    <AWB_Shade support="0"></AWB_Shade>
                </AWB>
                <Sence>
                    <Sence_Mode_Auto support="0"></Sence_Mode_Auto>
                    <Sence_Mode_Action support="0"></Sence_Mode_Action>
                    <Sence_Mode_Portrait support="0"></Sence_Mode_Portrait>
                    <Sence_Mode_Landscape support="0"></Sence_Mode_Landscape>
                    <Sence_Mode_Night support="0"></Sence_Mode_Night>
                    <Sence_Mode_Night_Portrait support="0"></Sence_Mode_Night_Portrait>
                    <Sence_Mode_Theatre support="0"></Sence_Mode_Theatre>
                    <Sence_Mode_Beach support="0"></Sence_Mode_Beach>
                    <Sence_Mode_Snow support="0"></Sence_Mode_Snow>
                    <Sence_Mode_Sunset support="0"></Sence_Mode_Sunset>
                    <Sence_Mode_Steayphoto support="0"></Sence_Mode_Steayphoto>
                    <Sence_Mode_Pireworks support="0"></Sence_Mode_Pireworks>
                    <Sence_Mode_Sports support="0"></Sence_Mode_Sports>
                    <Sence_Mode_Party support="0"></Sence_Mode_Party>
                    <Sence_Mode_Candlelight support="0"></Sence_Mode_Candlelight>
                    <Sence_Mode_Barcode support="0"></Sence_Mode_Barcode>
                    <Sence_Mode_HDR support="0"></Sence_Mode_HDR>
                </Sence>
                <Effect>
                    <Effect_None support="1"></Effect_None>
                    <Effect_Mono support="0"></Effect_Mono>
                    <Effect_Solarize support="0"></Effect_Solarize>
                    <Effect_Negative support="0"></Effect_Negative>
                    <Effect_Sepia support="0"></Effect_Sepia>
                    <Effect_Posterize support="0"></Effect_Posterize>
                    <Effect_Whiteboard support="0"></Effect_Whiteboard>
                    <Effect_Blackboard support="0"></Effect_Blackboard>
                    <Effect_Aqua support="0"></Effect_Aqua>
                </Effect>
                <FocusMode>
                    <Focus_Mode_Auto support="0"></Focus_Mode_Auto>
                    <Focus_Mode_Infinity support="0"></Focus_Mode_Infinity>
                    <Focus_Mode_Marco support="0"></Focus_Mode_Marco>
                    <Focus_Mode_Fixed support="0"></Focus_Mode_Fixed>
                    <Focus_Mode_Edof support="0"></Focus_Mode_Edof>
                    <Focus_Mode_Continuous_Video support="0"></Focus_Mode_Continuous_Video>
                    <Focus_Mode_Continuous_Picture support="0"></Focus_Mode_Continuous_Picture>
                </FocusMode>
                <FlashMode>
                    <Flash_Mode_Off support="0"></Flash_Mode_Off>
                    <Flash_Mode_On support="0"></Flash_Mode_On>
                    <Flash_Mode_Torch support="0"></Flash_Mode_Torch>
                    <Flash_Mode_Auto support="0"></Flash_Mode_Auto>
                    <Flash_Mode_Red_Eye support="0"></Flash_Mode_Red_Eye>
                </FlashMode>
                <AntiBanding>
                    <Anti_Banding_Auto support="0"></Anti_Banding_Auto>
                    <Anti_Banding_50HZ support="0"></Anti_Banding_50HZ>
                    <Anti_Banding_60HZ support="0"></Anti_Banding_60HZ>
                    <Anti_Banding_Off support="0"></Anti_Banding_Off>
                </AntiBanding>
                <HDR support="0"></HDR>
                <ZSL support="0"></ZSL>
                <DigitalZoom support="1"></DigitalZoom>
                <Continue_SnapShot support="1"></Continue_SnapShot>
                <InterpolationRes resolution="0"></InterpolationRes>
                <PreviewSize width="1280" height="720"></PreviewSize>
                <FaceDetect support="0" MaxNum="0"></FaceDetect>
                <Cproc support="0" contrast="1.1" saturation="1.8" hue="0" brightness="0"></Cproc>
                <Gammaout support = "0" gamma = "0.5" offset = "0"></Gammaout>
                <DV>
                    <DV_QCIF name="qcif" width="176" height="144" fps="30" support="0"></DV_QCIF>
                    <DV_QVGA name="qvga" width="320" height="240" fps="30" support="0"></DV_QVGA>
                    <DV_CIF name="cif" width="352" height="288" fps="30" support="0"></DV_CIF>
                    <DV_VGA name="480p" width="640" height="480" fps="30" support="0"></DV_VGA>
                    <DV_480P name="480p" width="720" height="480" fps="30" support="0"></DV_480P>
                    <DV_720P name="720p" width="1280" height="720" fps="60" support="1"></DV_720P>
                    <DV_1080P name="1080p" width="1920" height="1080" fps="60" support="1"></DV_1080P>
                </DV>
            </SoftWareInfo>
        </CamDevie>    

 

(4)到这里,hdmiin还是黑屏。

hal源码也大概看了看,没什么问题,检查了一下rk封装的isp动态库文件,发现老源码里面的比较小

用开源源码的库文件替换了自己老的的libisp_silicomimageisp_api.so文件,这时hdmiin应用顺利打开了。

 

本人在以往的经历,对Android源码涉足不深,好吧,没有涉及过。第一次在底层添加此类应用,还望大家多多指教,感谢能够提出更好的见解,以待学习。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值