From 92171d323a5b77641dcb34c0af095c7781031f71 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Wed, 13 Oct 2021 19:51:48 +0300 Subject: [PATCH 1/2] Fix support for Fudan SPI NOR --- .../kernel/patches/13_add_spi_nor_ids.patch | 42 +++++++++++++++++++ .../13_add_support_fm25q128a_flash.patch | 13 ------ .../patches/14_mx25l6433f_dual_read.patch | 11 ----- .../kernel/patches/15_xmc_dual_read.patch | 20 --------- 4 files changed, 42 insertions(+), 44 deletions(-) create mode 100644 br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_spi_nor_ids.patch delete mode 100644 br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_support_fm25q128a_flash.patch delete mode 100644 br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/14_mx25l6433f_dual_read.patch delete mode 100644 br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/15_xmc_dual_read.patch diff --git a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_spi_nor_ids.patch b/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_spi_nor_ids.patch new file mode 100644 index 00000000..1a9c3960 --- /dev/null +++ b/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_spi_nor_ids.patch @@ -0,0 +1,42 @@ +--- a/drivers/mtd/spi-nor/spi-nor.c 2021-10-13 19:11:27.986167869 +0300 +--- b/drivers/mtd/spi-nor/spi-nor.c 2021-10-13 19:12:00.874379209 +0300 +@@ -1245,7 +1245,7 @@ + { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) }, + { "mx25l3255e", INFO(0xc29e16, 0, 64 * 1024, 64, SECT_4K) }, + { "mx25l6436f", INFO(0xc22017, 0, 64 * 1024, 128, +- SPI_NOR_QUAD_READ), PARAMS(mxic), CLK_MHZ_2X(133) }, ++ SPI_NOR_DUAL_READ), CLK_MHZ_2X(133) }, + { "mx25l12835f", INFO(0xc22018, 0, 64 * 1024, 256, + SPI_NOR_QUAD_READ), PARAMS(mxic), CLK_MHZ_2X(84) }, + { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, +@@ -1299,13 +1299,13 @@ + PARAMS(micron_4k), CLK_MHZ_2X(80) }, + + /* XMC */ +- { "xm25qh64a", INFO(0x207017, 0, 64 * 1024, 128, SPI_NOR_QUAD_READ), ++ { "xm25qh64a", INFO(0x207017, 0, 64 * 1024, 128, SPI_NOR_DUAL_READ), + PARAMS(xmc), CLK_MHZ_2X(104) }, +- { "xm25qh64b", INFO(0x206017, 0, 64 * 1024, 128, SPI_NOR_QUAD_READ), ++ { "xm25qh64b", INFO(0x206017, 0, 64 * 1024, 128, SPI_NOR_DUAL_READ), + PARAMS(xmc), CLK_MHZ_2X(104) }, +- { "xm25qh128a", INFO(0x207018, 0, 64 * 1024, 256, SPI_NOR_QUAD_READ), ++ { "xm25qh128a", INFO(0x207018, 0, 64 * 1024, 256, SPI_NOR_DUAL_READ), + PARAMS(xmc), CLK_MHZ_2X(104) }, +- { "xm25qh128b", INFO(0x206018, 0, 64 * 1024, 256, SPI_NOR_QUAD_READ), ++ { "xm25qh128b", INFO(0x206018, 0, 64 * 1024, 256, SPI_NOR_DUAL_READ), + PARAMS(xmc), CLK_MHZ_2X(104) }, + + /* PMC */ +@@ -1464,6 +1464,12 @@ + + { "xm_xt25f64b-s", INFO(0x0b4017, 0, 64 * 1024, 128, + SPI_NOR_QUAD_READ), PARAMS(xtx), CLK_MHZ_2X(70) }, ++ ++ /* FM 3.3v */ ++ { "FM25Q64-SOB-T-G",INFO(0xa14017, 0, 64 * 1024, 128, ++ SPI_NOR_DUAL_READ), PARAMS(spansion), CLK_MHZ_2X(80) }, ++ { "FM25Q128-SOB-T-G",INFO(0xa14018, 0, 64 * 1024, 256, ++ SPI_NOR_DUAL_READ), PARAMS(spansion), CLK_MHZ_2X(80) }, + { }, + }; + diff --git a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_support_fm25q128a_flash.patch b/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_support_fm25q128a_flash.patch deleted file mode 100644 index 3103ac3e..00000000 --- a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/13_add_support_fm25q128a_flash.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/drivers/mtd/spi-nor/spi-nor.c 2021-06-19 13:56:54.523168941 +0000 -+++ b/drivers/mtd/spi-nor/spi-nor.c 2021-06-19 14:02:43.947271771 +0000 -@@ -1217,6 +1217,10 @@ - SECT_4K | SPI_NOR_QUAD_READ), PARAMS(gd), CLK_MHZ_2X(120) }, - { "gd25q128", INFO(0xc84018, 0, 64 * 1024, 256, - SECT_4K | SPI_NOR_QUAD_READ), PARAMS(gd), CLK_MHZ_2X(80) }, -+ -+ { "fm25q128a", INFO(0xa14018, 0, 64 * 1024, 256, -+ SECT_4K | SPI_NOR_DUAL_READ), PARAMS(gd), CLK_MHZ_2X(80) }, -+ - { "gd25q256", INFO(0xc84019, 0, 64 * 1024, 512, - SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES), PARAMS(gd), CLK_MHZ_2X(80) }, - /* GigaDevice 1.8V */ diff --git a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/14_mx25l6433f_dual_read.patch b/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/14_mx25l6433f_dual_read.patch deleted file mode 100644 index 2a1b44c7..00000000 --- a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/14_mx25l6433f_dual_read.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/mtd/spi-nor/spi-nor.c 2021-07-09 08:00:01.771026933 +0300 -+++ b/drivers/mtd/spi-nor/spi-nor.c 2021-07-09 08:04:33.973630596 +0300 -@@ -1249,7 +1249,7 @@ - { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) }, - { "mx25l3255e", INFO(0xc29e16, 0, 64 * 1024, 64, SECT_4K) }, - { "mx25l6436f", INFO(0xc22017, 0, 64 * 1024, 128, -- SPI_NOR_QUAD_READ), PARAMS(mxic), CLK_MHZ_2X(133) }, -+ SPI_NOR_DUAL_READ), CLK_MHZ_2X(133) }, - { "mx25l12835f", INFO(0xc22018, 0, 64 * 1024, 256, - SPI_NOR_QUAD_READ), PARAMS(mxic), CLK_MHZ_2X(84) }, - { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, diff --git a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/15_xmc_dual_read.patch b/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/15_xmc_dual_read.patch deleted file mode 100644 index 63adb945..00000000 --- a/br-ext-chip-hisilicon/board/hi3516ev200/kernel/patches/15_xmc_dual_read.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/drivers/mtd/spi-nor/spi-nor.c 2021-08-24 08:00:01.771026933 +0300 -+++ b/drivers/mtd/spi-nor/spi-nor.c 2021-08-24 08:04:33.973630596 +0300 -@@ -1303,13 +1303,13 @@ - PARAMS(micron_4k), CLK_MHZ_2X(80) }, - - /* XMC */ -- { "xm25qh64a", INFO(0x207017, 0, 64 * 1024, 128, SPI_NOR_QUAD_READ), -+ { "xm25qh64a", INFO(0x207017, 0, 64 * 1024, 128, SPI_NOR_DUAL_READ), - PARAMS(xmc), CLK_MHZ_2X(104) }, -- { "xm25qh64b", INFO(0x206017, 0, 64 * 1024, 128, SPI_NOR_QUAD_READ), -+ { "xm25qh64b", INFO(0x206017, 0, 64 * 1024, 128, SPI_NOR_DUAL_READ), - PARAMS(xmc), CLK_MHZ_2X(104) }, -- { "xm25qh128a", INFO(0x207018, 0, 64 * 1024, 256, SPI_NOR_QUAD_READ), -+ { "xm25qh128a", INFO(0x207018, 0, 64 * 1024, 256, SPI_NOR_DUAL_READ), - PARAMS(xmc), CLK_MHZ_2X(104) }, -- { "xm25qh128b", INFO(0x206018, 0, 64 * 1024, 256, SPI_NOR_QUAD_READ), -+ { "xm25qh128b", INFO(0x206018, 0, 64 * 1024, 256, SPI_NOR_DUAL_READ), - PARAMS(xmc), CLK_MHZ_2X(104) }, - - /* PMC */ From ce4dd29055c066c1954756c2c92d441c1a685667 Mon Sep 17 00:00:00 2001 From: Dmitry Ermakov Date: Thu, 14 Oct 2021 12:46:48 +0300 Subject: [PATCH 2/2] Add support for Spyco SP2305 sensor --- .../files/sensor/config/sp2305_i2c_1080p.ini | 149 ++++++++++++++++++ .../files/sensor/libsns_sp2305.so | Bin 0 -> 30868 bytes 2 files changed, 149 insertions(+) create mode 100644 general/package/hisilicon-osdrv-hi3516ev300/files/sensor/config/sp2305_i2c_1080p.ini create mode 100644 general/package/hisilicon-osdrv-hi3516ev300/files/sensor/libsns_sp2305.so diff --git a/general/package/hisilicon-osdrv-hi3516ev300/files/sensor/config/sp2305_i2c_1080p.ini b/general/package/hisilicon-osdrv-hi3516ev300/files/sensor/config/sp2305_i2c_1080p.ini new file mode 100644 index 00000000..628f27a9 --- /dev/null +++ b/general/package/hisilicon-osdrv-hi3516ev300/files/sensor/config/sp2305_i2c_1080p.ini @@ -0,0 +1,149 @@ +[sensor] +Sensor_type =stSnsSp2305Obj ;sensor name +Mode =0 ;WDR_MODE_NONE = 0 + ;WDR_MODE_BUILT_IN = 1 + ;WDR_MODE_QUDRA = 2 + ;WDR_MODE_2To1_LINE = 3 + ;WDR_MODE_2To1_FRAME = 4 + ;WDR_MODE_2To1_FRAME_FULL_RATE = 5 + ;WDR_MODE_3To1_LINE = 6 + ;WDR_MODE_3To1_FRAME = 7 + ;WDR_MODE_3To1_FRAME_FULL_RATE = 8 + ;WDR_MODE_4To1_LINE = 9 + ;WDR_MODE_4To1_FRAME = 10 + ;WDR_MODE_4To1_FRAME_FULL_RATE = 11 +DllFile = /usr/lib/sensors/libsns_sp2305.so ;sensor lib path + + +[mode] +input_mode =0 ;INPUT_MODE_MIPI = 0 + ;INPUT_MODE_SUBLVDS = 1 + ;INPUT_MODE_LVDS = 2 ...etc + +raw_bitness = 10 + +[mipi] +;----------only for mipi_dev--------- +data_type = 1 ;raw data type: 8/10/12/14 bit + ;DATA_TYPE_RAW_8BIT = 0, + ;DATA_TYPE_RAW_10BIT, + ;DATA_TYPE_RAW_12BIT, + ;DATA_TYPE_RAW_14BIT, + ;DATA_TYPE_RAW_16BIT, + ;DATA_TYPE_YUV420_8BIT_NORMAL, + ;DATA_TYPE_YUV420_8BIT_LEGACY, + ;DATA_TYPE_YUV422_8BIT, +lane_id = 0|1|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable + +[isp_image] +Isp_x =0 +Isp_y =0 +Isp_W =1920 +Isp_H =1080 +Isp_FrameRate=25 +Isp_Bayer =3 ;BAYER_RGGB=0, BAYER_GRBG=1, BAYER_GBRG=2, BAYER_BGGR=3 + +[vi_dev] +Input_mod = 6 + ; VI_MODE_BT656 = 0, /* ITU-R BT.656 YUV4:2:2 */ + ; VI_MODE_BT656_PACKED_YUV, /* ITU-R BT.656 packed YUV4:2:2 */ + ; VI_MODE_BT601, /* ITU-R BT.601 YUV4:2:2 */ + ; VI_MODE_DIGITAL_CAMERA, /* digatal camera mode */ + ; VI_MODE_BT1120_STANDARD, /* BT.1120 progressive mode */ + ; VI_MODE_BT1120_INTERLEAVED, /* BT.1120 interstage mode */ + ; VI_MODE_MIPI, /* MIPI RAW mode */ + ; VI_MODE_MIPI_YUV420_NORMAL, /* MIPI YUV420 normal mode */ + ; VI_MODE_MIPI_YUV420_LEGACY, /* MIPI YUV420 legacy mode */ + ; VI_MODE_MIPI_YUV422, /* MIPI YUV422 mode */ + ; VI_MODE_LVDS, /* LVDS mode */ + ; VI_MODE_HISPI, /* HiSPi mode */ + ; VI_MODE_SLVS, /* SLVS mode */ +Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0 + ;VI_WORK_MODE_2Multiplex, + ;VI_WORK_MODE_4Multiplex +Combine_mode =0 ;Y/C composite or separation mode + ;VI_COMBINE_COMPOSITE = 0 /*Composite mode */ + ;VI_COMBINE_SEPARATE, /*Separate mode */ +Comp_mode =0 ;Component mode (single-component or dual-component) + ;VI_COMP_MODE_SINGLE = 0, /*single component mode */ + ;VI_COMP_MODE_DOUBLE = 1, /*double component mode */ +Clock_edge =1 ;Clock edge mode (sampling on the rising or falling edge) + ;VI_CLK_EDGE_SINGLE_UP=0, /*rising edge */ + ;VI_CLK_EDGE_SINGLE_DOWN, /*falling edge */ +Mask_num =2 ;Component mask +Mask_0 =0xFFF00000 +Mask_1 =0x0 +Scan_mode = 1;VI_SCAN_INTERLACED = 0 + ;VI_SCAN_PROGRESSIVE, +Data_seq =2 ;data sequence (ONLY for YUV format) + ;----2th component U/V sequence in bt1120 + ; VI_INPUT_DATA_VUVU = 0, + ; VI_INPUT_DATA_UVUV, + ;----input sequence for yuv + ; VI_INPUT_DATA_UYVY = 0, + ; VI_INPUT_DATA_VYUY, + ; VI_INPUT_DATA_YUYV, + ; VI_INPUT_DATA_YVYU + +Vsync =1 ; vertical synchronization signal + ;VI_VSYNC_FIELD = 0, + ;VI_VSYNC_PULSE, +VsyncNeg=1 ;Polarity of the vertical synchronization signal + ;VI_VSYNC_NEG_HIGH = 0, + ;VI_VSYNC_NEG_LOW /*if VIU_VSYNC_E +Hsync =0 ;Attribute of the horizontal synchronization signal + ;VI_HSYNC_VALID_SINGNAL = 0, + ;VI_HSYNC_PULSE, +HsyncNeg =0 ;Polarity of the horizontal synchronization signal + ;VI_HSYNC_NEG_HIGH = 0, + ;VI_HSYNC_NEG_LOW +VsyncValid =1 ;Attribute of the valid vertical synchronization signal + ;VI_VSYNC_NORM_PULSE = 0, + ;VI_VSYNC_VALID_SINGAL, +VsyncValidNeg =0;Polarity of the valid vertical synchronization signal + ;VI_VSYNC_VALID_NEG_HIGH = 0, + ;VI_VSYNC_VALID_NEG_LOW +Timingblank_HsyncHfb =0 ;Horizontal front blanking width +Timingblank_HsyncAct =1920 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =1080 ;Vertical effetive width +Timingblank_VsyncVbb=0 ;Vertical back blanking height +Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive) +Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive) +Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive) + +;----- only for bt656 ---------- +FixCode =0 ;BT656_FIXCODE_1 = 0, + ;BT656_FIXCODE_0 +FieldPolar=0 ;BT656_FIELD_POLAR_STD = 0 + ;BT656_FIELD_POLAR_NSTD +DataPath =1 ;ISP enable or bypass + ;VI_PATH_BYPASS = 0,/* ISP bypass */ + ;VI_PATH_ISP = 1,/* ISP enable */ + ;VI_PATH_RAW = 2,/* Capture raw data, for debug */ +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=200 ; +DevRect_y=20 ; +DevRect_w=1920 ; +DevRect_h=1080 ; + +[vi_chn] +CapRect_X =0 +CapRect_Y =0 +CapRect_Width=1920 +CapRect_Height=1080 +DestSize_Width=1920 +DestSize_Height=1080 +CapSel =2 ;Frame/field select. ONLY used in interlaced mode + ;VI_CAPSEL_TOP = 0, /* top field */ + ;VI_CAPSEL_BOTTOM, /* bottom field */ + ;VI_CAPSEL_BOTH, /* top and bottom field */ + +PixFormat =26;PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 26 ...etc +CompressMode =0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc + +SrcFrameRate=-1 ;Source frame rate. -1: not controll +FrameRate =-1 ;Target frame rate. -1: not controll diff --git a/general/package/hisilicon-osdrv-hi3516ev300/files/sensor/libsns_sp2305.so b/general/package/hisilicon-osdrv-hi3516ev300/files/sensor/libsns_sp2305.so new file mode 100644 index 0000000000000000000000000000000000000000..2e1e92d8981c64b86c81d1c56e5bf965fbd78ded GIT binary patch literal 30868 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 z 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 DO~?17 literal 0 HcmV?d00001