├── Documents ├── CAM-MIPI9281V2-Compile Driver Source Code.pdf ├── CAM-MIPIOV9281 V2 User Manual V1.2.pdf └── use_innomaker_unique_driver_on_pi5 │ ├── Makefile_pi5 │ ├── inno_mipi_ov9281_csi0.dtbo │ ├── ov9281-pi5-csi0-initial.sh │ ├── ov9281-pi5-csi1-initial.sh │ └── readme.txt ├── Lens drawing ├── Lens Mount.png └── Lens.png ├── Linux_5.10.92 ├── arm64 │ └── pi3_4 │ │ ├── Makefile │ │ ├── vc_mipi_ov9281.dtbo │ │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko ├── cm4-dual │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko ├── pi3 │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko └── pi4 │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ └── vc_mipi_ov9281.ko ├── Linux_5.15.32 ├── arm64 │ ├── cm4-dual │ │ ├── Makefile │ │ ├── vc_mipi_ov9281.dtbo │ │ └── vc_mipi_ov9281 │ │ │ └── vc_mipi_ov9281.ko │ ├── pi3 │ │ ├── Makefile │ │ ├── vc_mipi_ov9281.dtbo │ │ └── vc_mipi_ov9281 │ │ │ └── vc_mipi_ov9281.ko │ └── pi4 │ │ ├── Makefile │ │ ├── vc_mipi_ov9281.dtbo │ │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko ├── cm4-dual │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko ├── pi3 │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ │ └── vc_mipi_ov9281.ko └── pi4 │ ├── Makefile │ ├── vc_mipi_ov9281.dtbo │ └── vc_mipi_ov9281 │ └── vc_mipi_ov9281.ko ├── README.md ├── autoinstall_driver.sh ├── inno_ov9281_driver_source_code ├── Readme.txt └── sourcecode │ ├── .Module.symvers.cmd │ ├── .modules.order.cmd │ ├── Makefile │ ├── Module.symvers │ ├── clear.sh │ ├── inno_mipi_ov9281-overlay.dts │ ├── inno_mipi_ov9281.dtbo │ ├── inno_mipi_ov9281 │ ├── .inno_mipi_ov9281.ko.cmd │ ├── .inno_mipi_ov9281.mod.cmd │ ├── .inno_mipi_ov9281.mod.o.cmd │ ├── .inno_mipi_ov9281.o.cmd │ ├── inno_mipi_ov9281.c │ ├── inno_mipi_ov9281.ko │ ├── inno_mipi_ov9281.mod │ ├── inno_mipi_ov9281.mod.c │ ├── inno_mipi_ov9281.mod.o │ └── inno_mipi_ov9281.o │ ├── inno_mipi_ov9281_cm4_dual.dtbo │ └── modules.order ├── raspberrypi-kernel-headers └── Download_Link.txt ├── raw image tools on Windows ├── 9281-raw10.raw ├── 9281-raw10toraw8-test.raw ├── Iview-UserManual.docx └── imgtools.rar └── tools ├── gpio-sysfs ├── i2c_read ├── i2c_write ├── raw10p2raw8 ├── raw16p10p2raw8 ├── tools_code ├── v4l2_capture_raw10.c ├── v4l2_capture_raw12.c ├── v4l2_capture_y10.c ├── v4l2_capture_y12.c └── v4l2_capture_y8.c ├── v4l2_capture_raw10 ├── v4l2_capture_raw12 ├── v4l2_capture_y10 ├── v4l2_capture_y10-16-5.4 ├── v4l2_capture_y12 ├── v4l2_capture_y8 ├── vcmipidemo-pi3 ├── vcmipidemo-pi3-arch64 ├── vcmipidemo-pi4 └── vcmipidemo-pi4-arch64 /Documents/CAM-MIPI9281V2-Compile Driver Source Code.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Documents/CAM-MIPI9281V2-Compile Driver Source Code.pdf -------------------------------------------------------------------------------- /Documents/CAM-MIPIOV9281 V2 User Manual V1.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Documents/CAM-MIPIOV9281 V2 User Manual V1.2.pdf -------------------------------------------------------------------------------- /Documents/use_innomaker_unique_driver_on_pi5/Makefile_pi5: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = inno_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER =rp1_cfe 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | 30 | obj-m := $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).o 31 | 32 | .PHONY: all 33 | 34 | 35 | all: $(KERNEL_BUILD_DIR) devicetree 36 | make -C $(KERNEL_BUILD_DIR) M=$(shell pwd) modules 37 | 38 | clean: 39 | -make -C $(KERNEL_BUILD_DIR) M=$(PWD) clean 40 | rm -f $(SENSOR_DRIVER).dtbo 41 | 42 | install: all devicetree-install 43 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 44 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 45 | sudo /sbin/depmod -a $(shell uname -r) 46 | sudo /sbin/modprobe $(SENSOR_DRIVER) 47 | @echo "--------------------------------------" 48 | @echo 49 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 50 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 51 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 52 | @echo 53 | @echo "--------------------------------------" 54 | 55 | rmmod: 56 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 57 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 58 | 59 | uninstall: 60 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 61 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 62 | sudo /sbin/depmod -a $(shell uname -r) 63 | @echo "--------------------------------------" 64 | @echo 65 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 66 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 67 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 68 | @echo 69 | @echo "--------------------------------------" 70 | 71 | devicetree: 72 | dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o $(SENSOR_DRIVER).dtbo $(SENSOR_DRIVER)-overlay.dts 73 | 74 | devicetree-install: devicetree 75 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 76 | 77 | setmode0: 78 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 79 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 80 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 81 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 82 | sudo dmesg -c 83 | 84 | setmode1: 85 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 86 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 87 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 88 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 89 | sudo dmesg -c 90 | 91 | setmode2: 92 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 93 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 94 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 95 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 96 | sudo dmesg -c 97 | 98 | setmode3: 99 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 100 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 101 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 102 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 103 | sudo dmesg -c 104 | 105 | setmode4: 106 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 107 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 108 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 109 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 110 | sudo dmesg -c 111 | 112 | setmode5: 113 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 114 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 115 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 116 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 117 | sudo dmesg -c 118 | 119 | setmode6: 120 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 121 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 122 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 123 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 124 | sudo dmesg -c 125 | 126 | setmode7: 127 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 128 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 129 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 130 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 131 | sudo dmesg -c 132 | 133 | setmode8: 134 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 135 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 136 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 137 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 138 | sudo dmesg -c 139 | 140 | setmode9: 141 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 142 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 143 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 144 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 145 | sudo dmesg -c 146 | 147 | setmode10: 148 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 149 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 150 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 151 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 152 | sudo dmesg -c 153 | 154 | setmode11: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 159 | sudo dmesg -c 160 | 161 | setmode12: 162 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 163 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 164 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 165 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 166 | sudo dmesg -c 167 | setmode13: 168 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 169 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 170 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 171 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 172 | sudo dmesg -c 173 | 174 | 175 | 176 | $(KERNEL_BUILD_DIR): 177 | @echo "--------------------------------------" 178 | @echo 179 | @echo " Error: Cannot continue due to the absence of the directory" 180 | @echo 181 | @echo " $(KERNEL_BUILD_DIR)" 182 | @echo 183 | @echo " You can try to fix it by installing the kernel header files package." 184 | @echo " The following command may do so:" 185 | @echo 186 | @echo " sudo apt-get install raspberrypi-kernel-headers" 187 | @echo 188 | @echo "--------------------------------------" 189 | @false 190 | 191 | 192 | -------------------------------------------------------------------------------- /Documents/use_innomaker_unique_driver_on_pi5/inno_mipi_ov9281_csi0.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Documents/use_innomaker_unique_driver_on_pi5/inno_mipi_ov9281_csi0.dtbo -------------------------------------------------------------------------------- /Documents/use_innomaker_unique_driver_on_pi5/ov9281-pi5-csi0-initial.sh: -------------------------------------------------------------------------------- 1 | DEV="$(v4l2-ctl --list-devices |grep -A 9 1f00110000 |grep media |tr -d '[:space:]')" 2 | media-ctl -d $DEV -r 3 | media-ctl -d $DEV -l ''\''csi2'\'':4->'\''rp1-cfe-csi2_ch0'\'':0[1]' 4 | media-ctl -v -d $DEV -V ''\''csi2'\'':0[fmt:Y8_1X8/1280x800 field:none]' 5 | media-ctl -v -d $DEV -V ''\''csi2'\'':4[fmt:Y8_1X8/1280x800 field:none]' 6 | v4l2-ctl -v width=1280,height=800,pixelformat=GREY 7 | -------------------------------------------------------------------------------- /Documents/use_innomaker_unique_driver_on_pi5/ov9281-pi5-csi1-initial.sh: -------------------------------------------------------------------------------- 1 | DEV="$(v4l2-ctl --list-devices |grep -A 9 1f00128000 |grep media |tr -d '[:space:]')" 2 | media-ctl -d $DEV -r 3 | media-ctl -d $DEV -l ''\''csi2'\'':4->'\''rp1-cfe-csi2_ch0'\'':0[1]' 4 | media-ctl -v -d $DEV -V ''\''csi2'\'':0[fmt:Y8_1X8/1280x800 field:none]' 5 | media-ctl -v -d $DEV -V ''\''csi2'\'':4[fmt:Y8_1X8/1280x800 field:none]' 6 | v4l2-ctl -v width=1280,height=800,pixelformat=GREY 7 | -------------------------------------------------------------------------------- /Documents/use_innomaker_unique_driver_on_pi5/readme.txt: -------------------------------------------------------------------------------- 1 | Use_innomaker_unique_driver_on_pi5 2 | 3 | Step1 , Follow CAM-MIPI9281V2-Compile Driver Source Code.PDF compiler and install driver; 4 | 5 | 6 | Step2, run below scripts accordinglly 7 | 8 | # For csi0 9 | ./ov9281-pi5-csi0-initial.sh 10 | 11 | # For csi1 12 | ./ov9281-pi5-csi1-initial.sh 13 | 14 | 15 | 16 | 17 | Step3, copy dtb files to overlays folder 18 | 19 | # For csi0 20 | copy inno_mipi_ov9281_csi0.dtbo to folder /boot/overlays 21 | add dtoverlay=inno_mipi_ov9281_csi0 to last line. 22 | 23 | # For csi1 24 | copy inno_mipi_ov9281.dtbo to folder /boot/overlays 25 | add dtoverlay=inno_mipi_ov9281 to last line. 26 | 27 | If use CSI0,CSI1 Both, need run both command. 28 | 29 | 30 | 31 | Step4, Set working mode 32 | 33 | # For PI5 Only 34 | sudo make -f Makefile_pi5 setmodeX #X means working mode 0,1,2,3,etc... -------------------------------------------------------------------------------- /Lens drawing/Lens Mount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Lens drawing/Lens Mount.png -------------------------------------------------------------------------------- /Lens drawing/Lens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Lens drawing/Lens.png -------------------------------------------------------------------------------- /Linux_5.10.92/arm64/pi3_4/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.10.92/arm64/pi3_4/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/arm64/pi3_4/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.10.92/arm64/pi3_4/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/arm64/pi3_4/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.10.92/cm4-dual/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.10.92/cm4-dual/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/cm4-dual/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.10.92/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.10.92/pi3/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.10.92/pi3/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/pi3/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.10.92/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.10.92/pi4/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.10.92/pi4/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/pi4/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.10.92/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.10.92/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/cm4-dual/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/cm4-dual/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/cm4-dual/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi3/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi3/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/pi3/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi4/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi4/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/pi4/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/arm64/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/arm64/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/cm4-dual/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/cm4-dual/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/cm4-dual/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/cm4-dual/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/pi3/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/pi3/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/pi3/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/pi3/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /Linux_5.15.32/pi4/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = vc_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | .PHONY: all 30 | 31 | install: 32 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 33 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 34 | sudo /sbin/depmod -a $(shell uname -r) 35 | sudo /sbin/modprobe $(SENSOR_DRIVER) 36 | @echo "--------------------------------------" 37 | @echo 38 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 39 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 40 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 41 | @echo 42 | @echo "--------------------------------------" 43 | 44 | rmmod: 45 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 46 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 47 | 48 | uninstall: 49 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 50 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 51 | sudo /sbin/depmod -a $(shell uname -r) 52 | @echo "--------------------------------------" 53 | @echo 54 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 55 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 56 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 57 | @echo 58 | @echo "--------------------------------------" 59 | 60 | 61 | devicetree-install: devicetree 62 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 63 | 64 | setmode0: 65 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 66 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 67 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 68 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 69 | sudo dmesg -c 70 | 71 | setmode1: 72 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 73 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 74 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 75 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 76 | sudo dmesg -c 77 | 78 | setmode2: 79 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 80 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 81 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 82 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 83 | sudo dmesg -c 84 | 85 | setmode3: 86 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 87 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 88 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 89 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 90 | sudo dmesg -c 91 | 92 | setmode4: 93 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 94 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 95 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 96 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 97 | sudo dmesg -c 98 | 99 | setmode5: 100 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 101 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 102 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 103 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 104 | sudo dmesg -c 105 | 106 | setmode6: 107 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 108 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 109 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 110 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 111 | sudo dmesg -c 112 | 113 | setmode7: 114 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 115 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 116 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 117 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 118 | sudo dmesg -c 119 | 120 | setmode8: 121 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 122 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 123 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 124 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 125 | sudo dmesg -c 126 | 127 | setmode9: 128 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 129 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 130 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 131 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 132 | sudo dmesg -c 133 | 134 | setmode10: 135 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 136 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 137 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 138 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 139 | sudo dmesg -c 140 | 141 | setmode11: 142 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 143 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 144 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 145 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 146 | sudo dmesg -c 147 | 148 | setmode12: 149 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 150 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 151 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 152 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 153 | sudo dmesg -c 154 | setmode13: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 159 | sudo dmesg -c 160 | 161 | 162 | 163 | $(KERNEL_BUILD_DIR): 164 | @echo "--------------------------------------" 165 | @echo 166 | @echo " Error: Cannot continue due to the absence of the directory" 167 | @echo 168 | @echo " $(KERNEL_BUILD_DIR)" 169 | @echo 170 | @echo " You can try to fix it by installing the kernel header files package." 171 | @echo " The following command may do so:" 172 | @echo 173 | @echo 174 | @echo "--------------------------------------" 175 | @false 176 | 177 | 178 | -------------------------------------------------------------------------------- /Linux_5.15.32/pi4/vc_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/pi4/vc_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /Linux_5.15.32/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/Linux_5.15.32/pi4/vc_mipi_ov9281/vc_mipi_ov9281.ko -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CAM-OV9281RAW-V2 2 | Sersor OV9281, RAW-DATA, 2-LAN Output Module 3 | ![](https://github.com/INNO-MAKER/Images-Folder/blob/main/CAM-OV9281RAW-V2.jpg) 4 | -------------------------------------------------------------------------------- /autoinstall_driver.sh: -------------------------------------------------------------------------------- 1 | ############################################################################################################### 2 | #Description: This codes was designed for help the user Automatic install the OV9281 driver 3 | # on all Raspbian system. There are two parts in this script. 4 | # Part 1 is add the to modify the '/boot/config.txt'and '/boot/cmdline.txt', 5 | # Part 2 is automatic the right driver version path and install. 6 | # This script was done in a hurry , if you find some bug, kindly let me know. thanks in advance. 7 | # 8 | #USAGE: run './autoinstall_driver.sh' on the terminal of Raspbian 9 | # 10 | #Author: calvin (calvin@inno-maker.com) 11 | # 12 | #data: 2022.05.26 13 | # 14 | ############################################################################################################### 15 | 16 | 17 | 18 | #Part 1 19 | 20 | echo "------INNO-MAKER cammipi_ov9281 driver install script v1.0------" 21 | 22 | echo "Enable i2c_vc in /boot/config.txt ..." 23 | 24 | awk 'BEGIN{ count=0; } 25 | { 26 | if ( $1 == "dtparam=i2c_vc=on" ) 27 | 28 | count++; 29 | 30 | } 31 | END{ 32 | print "count = "count; 33 | if ( count <= 0 ) { 34 | print "--- Add i2c_vc=on to /boot/config.txt"; 35 | system("sudo sh -c \"sed -i.bak \"/^#dtparam=i2c_vc=on/d\" /boot/config.txt\" "); 36 | system("sudo sh -c \"echo \"dtparam=i2c_vc=on\" >> /boot/config.txt\" "); 37 | } 38 | 39 | }' /boot/config.txt 40 | 41 | 42 | 43 | 44 | awk 'BEGIN{ count2=0; } 45 | { 46 | if ( $1 == "dtoverlay=vc_mipi_ov9281" ) 47 | 48 | count2++; 49 | 50 | } 51 | END{ 52 | print "count2 = "count2; 53 | if ( count <= 0 ) { 54 | print "--- Add dtoverlay=vc_mipi_ov9281 to /boot/config.txt"; 55 | system("sudo sh -c \"sed -i.bak \"/^#dtoverlay=vc_mipi_ov9281/d\" /boot/config.txt\" "); 56 | system("sudo sh -c \"echo \"dtoverlay=vc_mipi_ov9281\" >> /boot/config.txt\" "); 57 | } 58 | 59 | }' /boot/config.txt 60 | 61 | 62 | 63 | 64 | 65 | str=$(sudo cat /boot/cmdline.txt) 66 | echo "$str" 67 | if [[ "$str" =~ .*cma=.*M ]]; then 68 | echo "--- alread have cma=128M string" 69 | else 70 | echo "--- Add cma=128M to /boot/cmdline.txt" 71 | sudo sed 's/[ \t]*$//g' /boot/cmdline.txt -i.bak 72 | sudo sed '/console=/s/$/ cma=128M/' /boot/cmdline.txt -i.bak 73 | fi 74 | 75 | 76 | 77 | #Part 2 78 | 79 | 80 | strVersion=$(awk -F " " '{print $3}' /proc/version) 81 | strModel=$(cat /proc/device-tree/model) 82 | strArch=$(arch) 83 | 84 | echo $strVersion 85 | echo $strModel 86 | echo $strArch 87 | 88 | version=0 89 | model=0 90 | arch=0 91 | driverpath=0 92 | 93 | case $strVersion in 94 | *5.15.32*) 95 | version=Linux_5.15.32 96 | ;; 97 | *5.10.92*) 98 | version=Linux_5.10.92 99 | ;; 100 | *5.10.63*) 101 | version=Linux_5.10.63 102 | ;; 103 | 104 | *) 105 | echo "@ Linux Version Not Match! Please contact support@inno-maker.com" 106 | ;; 107 | esac 108 | 109 | case $strModel in 110 | *Pi' '4*) 111 | model=pi4 112 | ;; 113 | *Pi' '3*) 114 | model=pi3 115 | ;; 116 | *Pi' 'Compute' 'Module' '4*) 117 | model=cm4-dual 118 | ;; 119 | 120 | *Pi' '0*) 121 | echo "@ This driver do not suppor pi0, Please contact support@inno-maker.com" 122 | ;; 123 | *) 124 | echo "@ HW Version Not Match! Please contact support@inno-maker.com" 125 | ;; 126 | esac 127 | 128 | case $strArch in 129 | *armv7l*) 130 | arch=armv7l 131 | echo "System is 32 bit arch." 132 | driverpath=./$version/$model 133 | ;; 134 | *aarch64*) 135 | arch=arm64 136 | echo "System is 64 bit arch." 137 | driverpath=./$version/$arch/pi3_4 138 | ;; 139 | *) 140 | echo "@ Unkown System Arch! Please contact support@inno-maker.com" 141 | ;; 142 | esac 143 | 144 | echo "driverpath: "$driverpath 145 | 146 | if [[ $version == 0 || $model == 0 || $arch == 0 ]]; then 147 | echo "@ Install Failed, Please contact support@inno-maker.com" 148 | exit 149 | fi 150 | 151 | 152 | sudo chmod -R 777 ./tools/* 153 | 154 | cd $driverpath 155 | echo "PWD: "$(pwd) 156 | sudo chmod -R 777 ./* 157 | 158 | 159 | echo "-----make install----START:" 160 | sudo make install 161 | echo "-----make install----END." 162 | 163 | echo "INNO-MAKER: reboot now?(y/n):" 164 | read KB_INPUT 165 | case $KB_INPUT in 166 | 'y'|'Y') 167 | echo "reboot..." 168 | sudo reboot 169 | ;; 170 | *) 171 | echo "cancel." 172 | ;; 173 | esac 174 | 175 | 176 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/Readme.txt: -------------------------------------------------------------------------------- 1 | 2 | Due some data structure modification after kernel v5.10.63 . 3 | One macro defintion '#define KERNEL_5_15 1' (Lines 50) is added in /inno_mipi_ov9281/inno_mipi_ov9281.c. 4 | If you are using the kernel earlier than (or equal to) v5.10.63, please mask it before compile. -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/.Module.symvers.cmd: -------------------------------------------------------------------------------- 1 | cmd_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/Module.symvers := sed 's/\.ko$$/\.o/' /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/modules.order | scripts/mod/modpost -m -a -o /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/Module.symvers -e -i Module.symvers -T - 2 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/.modules.order.cmd: -------------------------------------------------------------------------------- 1 | cmd_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/modules.order := { echo /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.ko; :; } | awk '!x[$$0]++' - > /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/modules.order 2 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/Makefile: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Makefile 3 | # 4 | # Mipi Module Sensor Driver Inno-maker 2019 5 | # 6 | # Author: Jack Yang 7 | # 8 | ################################################################################ 9 | 10 | # must correspond to its file name 11 | # 12 | SENSOR_NAME = inno_mipi_ov9281 13 | 14 | # must correspond to its directory name 15 | # at /lib/modules/*/kernel/drivers/media/platform 16 | # 17 | PLATFORM_NAME = bcm2835 18 | 19 | ################################################################################ 20 | SENSOR_DRIVER = $(SENSOR_NAME) 21 | SENSOR_DRIVER_DIR = $(SENSOR_NAME) 22 | PLATFORM_DRIVER = $(PLATFORM_NAME)-unicam 23 | KERNEL_MODULE_DIR = /lib/modules/$(shell uname -r) 24 | KERNEL_BUILD_DIR = $(KERNEL_MODULE_DIR)/build 25 | KERNEL_I2C_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/i2c 26 | KERNEL_PLATFORM_DIR = $(KERNEL_MODULE_DIR)/kernel/drivers/media/platform/$(PLATFORM_NAME) 27 | BOOT_OVERLAYS_DIR = /boot/overlays 28 | 29 | 30 | obj-m := $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).o 31 | 32 | .PHONY: all 33 | 34 | 35 | all: $(KERNEL_BUILD_DIR) devicetree 36 | make -C $(KERNEL_BUILD_DIR) M=$(shell pwd) modules 37 | 38 | clean: 39 | -make -C $(KERNEL_BUILD_DIR) M=$(PWD) clean 40 | rm -f $(SENSOR_DRIVER).dtbo 41 | 42 | install: all devicetree-install 43 | sudo install -p -m 644 $(SENSOR_DRIVER_DIR)/$(SENSOR_DRIVER).ko $(KERNEL_I2C_DIR)/ 44 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR)/ 45 | sudo /sbin/depmod -a $(shell uname -r) 46 | sudo /sbin/modprobe $(SENSOR_DRIVER) 47 | @echo "--------------------------------------" 48 | @echo 49 | @echo " ADD 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' to your /boot/config.txt" 50 | @echo " ADD 'disable_touchscreen=1' to your /boot/config.txt if a touchscreen is attached" 51 | @echo " ADD 'cma=128M' to your /boot/cmdline.txt" 52 | @echo 53 | @echo "--------------------------------------" 54 | 55 | rmmod: 56 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 57 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 58 | 59 | uninstall: 60 | sudo rm -f $(KERNEL_I2C_DIR)/$(SENSOR_DRIVER).ko 61 | sudo rm -f $(BOOT_OVERLAYS_DIR)/$(SENSOR_DRIVER).dtbo 62 | sudo /sbin/depmod -a $(shell uname -r) 63 | @echo "--------------------------------------" 64 | @echo 65 | @echo " REMOVE 'dtparam=i2c_vc=on' and 'dtoverlay=$(SENSOR_DRIVER)' from your /boot/config.txt" 66 | @echo " REMOVE 'disable_touchscreen=1' from your /boot/config.txt if a touchscreen is attached" 67 | @echo " REMOVE 'cma=128M' from your /boot/cmdline.txt" 68 | @echo 69 | @echo "--------------------------------------" 70 | 71 | devicetree: 72 | dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o $(SENSOR_DRIVER).dtbo $(SENSOR_DRIVER)-overlay.dts 73 | 74 | devicetree-install: devicetree 75 | sudo install -p -m 644 $(SENSOR_DRIVER).dtbo $(BOOT_OVERLAYS_DIR) 76 | 77 | setmode0: 78 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 79 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 80 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 81 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=0 82 | sudo dmesg -c 83 | 84 | setmode1: 85 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 86 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 87 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 88 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=1 89 | sudo dmesg -c 90 | 91 | setmode2: 92 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 93 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 94 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 95 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=2 96 | sudo dmesg -c 97 | 98 | setmode3: 99 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 100 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 101 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 102 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=3 103 | sudo dmesg -c 104 | 105 | setmode4: 106 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 107 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 108 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 109 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=4 110 | sudo dmesg -c 111 | 112 | setmode5: 113 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 114 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 115 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 116 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=5 117 | sudo dmesg -c 118 | 119 | setmode6: 120 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 121 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 122 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 123 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=6 124 | sudo dmesg -c 125 | 126 | setmode7: 127 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 128 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 129 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 130 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=7 131 | sudo dmesg -c 132 | 133 | setmode8: 134 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 135 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 136 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 137 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=8 138 | sudo dmesg -c 139 | 140 | setmode9: 141 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 142 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 143 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 144 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=9 145 | sudo dmesg -c 146 | 147 | setmode10: 148 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 149 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 150 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 151 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=10 152 | sudo dmesg -c 153 | 154 | setmode11: 155 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 156 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 157 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 158 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=11 159 | sudo dmesg -c 160 | 161 | setmode12: 162 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 163 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 164 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 165 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=12 166 | sudo dmesg -c 167 | setmode13: 168 | sudo /sbin/modprobe -r $(PLATFORM_DRIVER) 169 | sudo /sbin/modprobe -r $(SENSOR_DRIVER) 170 | sudo /sbin/modprobe $(PLATFORM_DRIVER) debug=3 171 | sudo /sbin/modprobe $(SENSOR_DRIVER) sensor_mode=13 172 | sudo dmesg -c 173 | 174 | 175 | 176 | $(KERNEL_BUILD_DIR): 177 | @echo "--------------------------------------" 178 | @echo 179 | @echo " Error: Cannot continue due to the absence of the directory" 180 | @echo 181 | @echo " $(KERNEL_BUILD_DIR)" 182 | @echo 183 | @echo " You can try to fix it by installing the kernel header files package." 184 | @echo " The following command may do so:" 185 | @echo 186 | @echo " sudo apt-get install raspberrypi-kernel-headers" 187 | @echo 188 | @echo "--------------------------------------" 189 | @false 190 | 191 | 192 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/Module.symvers: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/Module.symvers -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/clear.sh: -------------------------------------------------------------------------------- 1 | sudo rm *.dtbo 2 | sudo rm *.mod 3 | sudo rm *.mod.* 4 | sudo rm modules.order 5 | sudo rm Module.symvers 6 | sudo rm *.ko 7 | sudo rm ./inno_mipi_ov9281/*.ko 8 | sudo rm ./inno_mipi_ov9281/*.mod 9 | sudo rm ./inno_mipi_ov9281/*.mod.* 10 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281-overlay.dts: -------------------------------------------------------------------------------- 1 | // 2 | // Definitions for MIPI OV9281 camera module on VC I2C bus 3 | // 4 | // Copyright (C) 2022 SHENZHEN InnoMaker 5 | // 6 | 7 | /dts-v1/; 8 | /plugin/; 9 | 10 | 11 | /{ 12 | compatible = "brcm,bcm2835"; 13 | 14 | fragment@0 { 15 | target = <&i2c_csi_dsi>; 16 | __overlay__ { 17 | #address-cells = <1>; 18 | #size-cells = <0>; 19 | status = "okay"; 20 | inno_mipi_ov9281: inno_mipi_ov9281@60 { 21 | compatible = "inno_mipi_ov9281"; 22 | reg = <0x60>; 23 | status = "okay"; 24 | 25 | pwdn-gpios = <&gpio 41 1>, <&gpio 32 1>; 26 | clocks = <&inno_mipi_ov9281_clk>; 27 | 28 | inno_mipi_ov9281_clk: camera-clk { 29 | compatible = "fixed-clock"; 30 | #clock-cells = <0>; 31 | clock-frequency = <24000000>; 32 | }; 33 | 34 | port { 35 | inno_mipi_ov9281_0: endpoint { 36 | remote-endpoint = <&csi1_ep>; 37 | clock-lanes = <0>; 38 | data-lanes = <1 2>; 39 | clock-noncontinuous; 40 | link-frequencies = 41 | /bits/ 64 <800000000>; 42 | }; 43 | }; 44 | }; 45 | 46 | inno_mipi_ov9281@10 { 47 | compatible = "dummy"; 48 | reg = <0x10>; 49 | status = "disabled"; 50 | }; 51 | }; 52 | }; 53 | 54 | fragment@1 { 55 | target = <&csi1>; 56 | __overlay__ { 57 | #address-cells = <1>; 58 | #size-cells = <0>; 59 | status = "okay"; 60 | 61 | port { 62 | #address-cells = <1>; 63 | #size-cells = <0>; 64 | csi1_ep: endpoint { 65 | remote-endpoint = <&inno_mipi_ov9281_0>; 66 | data-lanes= <1 2>; 67 | clock-noncontinuous; 68 | }; 69 | }; 70 | }; 71 | }; 72 | 73 | fragment@2 { 74 | target = <&i2c0_pins>; 75 | __dormant__ { 76 | brcm,pins = <28 29>; 77 | brcm,function = <4>; /* alt0 */ 78 | }; 79 | }; 80 | fragment@3 { 81 | target = <&i2c0_pins>; 82 | __dormant__ { 83 | brcm,pins = <44 45>; 84 | brcm,function = <5>; /* alt1 */ 85 | }; 86 | }; 87 | fragment@4 { 88 | target = <&i2c0if>; 89 | __overlay__ { 90 | status = "okay"; 91 | }; 92 | }; 93 | 94 | fragment@5 { 95 | target-path="/__overrides__"; 96 | __overlay__ { 97 | cam0-pwdn-ctrl = <&inno_mipi_ov9281>,"pwdn-gpios:0"; 98 | cam0-pwdn = <&inno_mipi_ov9281>,"pwdn-gpios:4"; 99 | cam0-led-ctrl = <&inno_mipi_ov9281>,"pwdn-gpios:12"; 100 | cam0-led = <&inno_mipi_ov9281>,"pwdn-gpios:16"; 101 | }; 102 | }; 103 | fragment@6{ 104 | target=<&i2c0mux>; 105 | __overlay__ { 106 | 107 | status="okay"; 108 | }; 109 | 110 | }; 111 | 112 | __overrides__ { 113 | i2c_pins_28_29 = <0>,"+2-3"; 114 | }; 115 | }; 116 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281.dtbo -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/.inno_mipi_ov9281.ko.cmd: -------------------------------------------------------------------------------- 1 | cmd_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.ko := ld -r -EL -maarch64elf --build-id=sha1 -T scripts/module.lds -o /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.ko /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.o /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o; true 2 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/.inno_mipi_ov9281.mod.cmd: -------------------------------------------------------------------------------- 1 | cmd_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod := { echo /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.o; echo; } > /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod 2 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/.inno_mipi_ov9281.mod.o.cmd: -------------------------------------------------------------------------------- 1 | cmd_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o := gcc -Wp,-MMD,/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/.inno_mipi_ov9281.mod.o.d -nostdinc -isystem /usr/lib/gcc/aarch64-linux-gnu/10/include -I./arch/arm64/include -I./arch/arm64/include/generated -I./include -I./arch/arm64/include/uapi -I./arch/arm64/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -DCC_USING_PATCHABLE_FUNCTION_ENTRY -DKASAN_SHADOW_SCALE_SHIFT= -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu89 -mgeneral-regs-only -DCONFIG_CC_HAS_K_CONSTRAINT=1 -Wno-psabi -mabi=lp64 -fno-asynchronous-unwind-tables -fno-unwind-tables -mbranch-protection=pac-ret+leaf+bti -Wa,-march=armv8.5-a -DARM64_ASM_ARCH='"armv8.5-a"' -DKASAN_SHADOW_SCALE_SHIFT= -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -O2 -fno-allow-store-data-races -Wframe-larger-than=2048 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-stack-clash-protection -fpatchable-function-entry=2 -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -mstack-protector-guard=sysreg -mstack-protector-guard-reg=sp_el0 -mstack-protector-guard-offset=1344 -DMODULE -DKBUILD_BASENAME='"inno_mipi_ov9281.mod"' -DKBUILD_MODNAME='"inno_mipi_ov9281"' -D__KBUILD_MODNAME=kmod_inno_mipi_ov9281 -c -o /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.c 2 | 3 | source_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o := /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.c 4 | 5 | deps_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o := \ 6 | $(wildcard include/config/MODULE_UNLOAD) \ 7 | $(wildcard include/config/RETPOLINE) \ 8 | include/linux/compiler-version.h \ 9 | $(wildcard include/config/CC_VERSION_TEXT) \ 10 | include/linux/kconfig.h \ 11 | $(wildcard include/config/CPU_BIG_ENDIAN) \ 12 | $(wildcard include/config/BOOGER) \ 13 | $(wildcard include/config/FOO) \ 14 | include/linux/compiler_types.h \ 15 | $(wildcard include/config/HAVE_ARCH_COMPILER_H) \ 16 | $(wildcard include/config/CC_HAS_ASM_INLINE) \ 17 | include/linux/compiler_attributes.h \ 18 | include/linux/compiler-gcc.h \ 19 | $(wildcard include/config/ARCH_USE_BUILTIN_BSWAP) \ 20 | $(wildcard include/config/KCOV) \ 21 | arch/arm64/include/asm/compiler.h \ 22 | $(wildcard include/config/CFI_CLANG) \ 23 | include/linux/module.h \ 24 | $(wildcard include/config/MODULES) \ 25 | $(wildcard include/config/SYSFS) \ 26 | $(wildcard include/config/MODULES_TREE_LOOKUP) \ 27 | $(wildcard include/config/LIVEPATCH) \ 28 | $(wildcard include/config/STACKTRACE_BUILD_ID) \ 29 | $(wildcard include/config/MODULE_SIG) \ 30 | $(wildcard include/config/GENERIC_BUG) \ 31 | $(wildcard include/config/KALLSYMS) \ 32 | $(wildcard include/config/SMP) \ 33 | $(wildcard include/config/TRACEPOINTS) \ 34 | $(wildcard include/config/TREE_SRCU) \ 35 | $(wildcard include/config/BPF_EVENTS) \ 36 | $(wildcard include/config/DEBUG_INFO_BTF_MODULES) \ 37 | $(wildcard include/config/JUMP_LABEL) \ 38 | $(wildcard include/config/TRACING) \ 39 | $(wildcard include/config/EVENT_TRACING) \ 40 | $(wildcard include/config/FTRACE_MCOUNT_RECORD) \ 41 | $(wildcard include/config/KPROBES) \ 42 | $(wildcard include/config/HAVE_STATIC_CALL_INLINE) \ 43 | $(wildcard include/config/PRINTK_INDEX) \ 44 | $(wildcard include/config/CONSTRUCTORS) \ 45 | $(wildcard include/config/FUNCTION_ERROR_INJECTION) \ 46 | include/linux/list.h \ 47 | $(wildcard include/config/DEBUG_LIST) \ 48 | include/linux/types.h \ 49 | $(wildcard include/config/HAVE_UID16) \ 50 | $(wildcard include/config/UID16) \ 51 | $(wildcard include/config/ARCH_DMA_ADDR_T_64BIT) \ 52 | $(wildcard include/config/PHYS_ADDR_T_64BIT) \ 53 | $(wildcard include/config/64BIT) \ 54 | $(wildcard include/config/ARCH_32BIT_USTAT_F_TINODE) \ 55 | include/uapi/linux/types.h \ 56 | arch/arm64/include/generated/uapi/asm/types.h \ 57 | include/uapi/asm-generic/types.h \ 58 | include/asm-generic/int-ll64.h \ 59 | include/uapi/asm-generic/int-ll64.h \ 60 | arch/arm64/include/uapi/asm/bitsperlong.h \ 61 | include/asm-generic/bitsperlong.h \ 62 | include/uapi/asm-generic/bitsperlong.h \ 63 | include/uapi/linux/posix_types.h \ 64 | include/linux/stddef.h \ 65 | include/uapi/linux/stddef.h \ 66 | include/linux/compiler_types.h \ 67 | arch/arm64/include/uapi/asm/posix_types.h \ 68 | include/uapi/asm-generic/posix_types.h \ 69 | include/linux/poison.h \ 70 | $(wildcard include/config/ILLEGAL_POINTER_VALUE) \ 71 | include/linux/const.h \ 72 | include/vdso/const.h \ 73 | include/uapi/linux/const.h \ 74 | include/linux/kernel.h \ 75 | $(wildcard include/config/PREEMPT_VOLUNTARY) \ 76 | $(wildcard include/config/PREEMPT_DYNAMIC) \ 77 | $(wildcard include/config/PREEMPT_) \ 78 | $(wildcard include/config/DEBUG_ATOMIC_SLEEP) \ 79 | $(wildcard include/config/MMU) \ 80 | $(wildcard include/config/PROVE_LOCKING) \ 81 | include/linux/stdarg.h \ 82 | include/linux/align.h \ 83 | include/linux/limits.h \ 84 | include/uapi/linux/limits.h \ 85 | include/vdso/limits.h \ 86 | include/linux/linkage.h \ 87 | $(wildcard include/config/ARCH_USE_SYM_ANNOTATIONS) \ 88 | include/linux/stringify.h \ 89 | include/linux/export.h \ 90 | $(wildcard include/config/MODVERSIONS) \ 91 | $(wildcard include/config/MODULE_REL_CRCS) \ 92 | $(wildcard include/config/HAVE_ARCH_PREL32_RELOCATIONS) \ 93 | $(wildcard include/config/TRIM_UNUSED_KSYMS) \ 94 | include/linux/compiler.h \ 95 | $(wildcard include/config/TRACE_BRANCH_PROFILING) \ 96 | $(wildcard include/config/PROFILE_ALL_BRANCHES) \ 97 | $(wildcard include/config/STACK_VALIDATION) \ 98 | arch/arm64/include/asm/rwonce.h \ 99 | $(wildcard include/config/LTO) \ 100 | $(wildcard include/config/AS_HAS_LDAPR) \ 101 | include/asm-generic/rwonce.h \ 102 | include/linux/kasan-checks.h \ 103 | $(wildcard include/config/KASAN_GENERIC) \ 104 | $(wildcard include/config/KASAN_SW_TAGS) \ 105 | include/linux/kcsan-checks.h \ 106 | $(wildcard include/config/KCSAN) \ 107 | $(wildcard include/config/KCSAN_IGNORE_ATOMICS) \ 108 | arch/arm64/include/asm/linkage.h \ 109 | $(wildcard include/config/ARM64_BTI_KERNEL) \ 110 | include/linux/bitops.h \ 111 | include/linux/bits.h \ 112 | include/vdso/bits.h \ 113 | include/linux/build_bug.h \ 114 | include/linux/typecheck.h \ 115 | include/uapi/linux/kernel.h \ 116 | include/uapi/linux/sysinfo.h \ 117 | arch/arm64/include/asm/bitops.h \ 118 | include/asm-generic/bitops/builtin-__ffs.h \ 119 | include/asm-generic/bitops/builtin-ffs.h \ 120 | include/asm-generic/bitops/builtin-__fls.h \ 121 | include/asm-generic/bitops/builtin-fls.h \ 122 | include/asm-generic/bitops/ffz.h \ 123 | include/asm-generic/bitops/fls64.h \ 124 | include/asm-generic/bitops/find.h \ 125 | $(wildcard include/config/GENERIC_FIND_FIRST_BIT) \ 126 | include/asm-generic/bitops/sched.h \ 127 | include/asm-generic/bitops/hweight.h \ 128 | include/asm-generic/bitops/arch_hweight.h \ 129 | include/asm-generic/bitops/const_hweight.h \ 130 | include/asm-generic/bitops/atomic.h \ 131 | include/linux/atomic.h \ 132 | arch/arm64/include/asm/atomic.h \ 133 | arch/arm64/include/asm/barrier.h \ 134 | $(wildcard include/config/ARM64_PSEUDO_NMI) \ 135 | include/asm-generic/barrier.h \ 136 | arch/arm64/include/asm/cmpxchg.h \ 137 | arch/arm64/include/asm/lse.h \ 138 | $(wildcard include/config/ARM64_LSE_ATOMICS) \ 139 | arch/arm64/include/asm/atomic_ll_sc.h \ 140 | $(wildcard include/config/CC_HAS_K_CONSTRAINT) \ 141 | include/linux/jump_label.h \ 142 | $(wildcard include/config/HAVE_ARCH_JUMP_LABEL_RELATIVE) \ 143 | arch/arm64/include/asm/jump_label.h \ 144 | arch/arm64/include/asm/insn.h \ 145 | arch/arm64/include/asm/insn-def.h \ 146 | arch/arm64/include/asm/alternative.h \ 147 | arch/arm64/include/asm/alternative-macros.h \ 148 | arch/arm64/include/generated/asm/cpucaps.h \ 149 | include/linux/init.h \ 150 | $(wildcard include/config/STRICT_KERNEL_RWX) \ 151 | $(wildcard include/config/STRICT_MODULE_RWX) \ 152 | $(wildcard include/config/LTO_CLANG) \ 153 | arch/arm64/include/asm/atomic_lse.h \ 154 | include/linux/atomic/atomic-arch-fallback.h \ 155 | $(wildcard include/config/GENERIC_ATOMIC64) \ 156 | include/linux/atomic/atomic-long.h \ 157 | include/linux/atomic/atomic-instrumented.h \ 158 | include/linux/instrumented.h \ 159 | include/asm-generic/bitops/instrumented-atomic.h \ 160 | include/asm-generic/bitops/lock.h \ 161 | include/asm-generic/bitops/instrumented-lock.h \ 162 | include/asm-generic/bitops/non-atomic.h \ 163 | include/asm-generic/bitops/le.h \ 164 | arch/arm64/include/uapi/asm/byteorder.h \ 165 | include/linux/byteorder/little_endian.h \ 166 | include/uapi/linux/byteorder/little_endian.h \ 167 | include/linux/swab.h \ 168 | include/uapi/linux/swab.h \ 169 | arch/arm64/include/generated/uapi/asm/swab.h \ 170 | include/uapi/asm-generic/swab.h \ 171 | include/linux/byteorder/generic.h \ 172 | include/asm-generic/bitops/ext2-atomic-setbit.h \ 173 | include/linux/kstrtox.h \ 174 | include/linux/log2.h \ 175 | $(wildcard include/config/ARCH_HAS_ILOG2_U32) \ 176 | $(wildcard include/config/ARCH_HAS_ILOG2_U64) \ 177 | include/linux/math.h \ 178 | arch/arm64/include/generated/asm/div64.h \ 179 | include/asm-generic/div64.h \ 180 | include/linux/minmax.h \ 181 | include/linux/panic.h \ 182 | $(wildcard include/config/PANIC_TIMEOUT) \ 183 | include/linux/printk.h \ 184 | $(wildcard include/config/MESSAGE_LOGLEVEL_DEFAULT) \ 185 | $(wildcard include/config/CONSOLE_LOGLEVEL_DEFAULT) \ 186 | $(wildcard include/config/CONSOLE_LOGLEVEL_QUIET) \ 187 | $(wildcard include/config/EARLY_PRINTK) \ 188 | $(wildcard include/config/PRINTK) \ 189 | $(wildcard include/config/DYNAMIC_DEBUG) \ 190 | $(wildcard include/config/DYNAMIC_DEBUG_CORE) \ 191 | include/linux/kern_levels.h \ 192 | include/linux/cache.h \ 193 | $(wildcard include/config/ARCH_HAS_CACHE_LINE_SIZE) \ 194 | arch/arm64/include/asm/cache.h \ 195 | $(wildcard include/config/KASAN_HW_TAGS) \ 196 | arch/arm64/include/asm/cputype.h \ 197 | arch/arm64/include/asm/sysreg.h \ 198 | $(wildcard include/config/BROKEN_GAS_INST) \ 199 | $(wildcard include/config/ARM64_PA_BITS_52) \ 200 | $(wildcard include/config/ARM64_4K_PAGES) \ 201 | $(wildcard include/config/ARM64_16K_PAGES) \ 202 | $(wildcard include/config/ARM64_64K_PAGES) \ 203 | include/linux/kasan-tags.h \ 204 | include/linux/ratelimit_types.h \ 205 | include/uapi/linux/param.h \ 206 | arch/arm64/include/uapi/asm/param.h \ 207 | include/asm-generic/param.h \ 208 | $(wildcard include/config/HZ) \ 209 | include/uapi/asm-generic/param.h \ 210 | include/linux/spinlock_types.h \ 211 | $(wildcard include/config/PREEMPT_RT) \ 212 | $(wildcard include/config/DEBUG_LOCK_ALLOC) \ 213 | include/linux/spinlock_types_raw.h \ 214 | $(wildcard include/config/DEBUG_SPINLOCK) \ 215 | arch/arm64/include/asm/spinlock_types.h \ 216 | include/asm-generic/qspinlock_types.h \ 217 | $(wildcard include/config/NR_CPUS) \ 218 | include/asm-generic/qrwlock_types.h \ 219 | include/linux/lockdep_types.h \ 220 | $(wildcard include/config/PROVE_RAW_LOCK_NESTING) \ 221 | $(wildcard include/config/PREEMPT_LOCK) \ 222 | $(wildcard include/config/LOCKDEP) \ 223 | $(wildcard include/config/LOCK_STAT) \ 224 | include/linux/rwlock_types.h \ 225 | include/linux/once_lite.h \ 226 | include/linux/static_call_types.h \ 227 | $(wildcard include/config/HAVE_STATIC_CALL) \ 228 | include/linux/stat.h \ 229 | arch/arm64/include/asm/stat.h \ 230 | $(wildcard include/config/COMPAT) \ 231 | arch/arm64/include/generated/uapi/asm/stat.h \ 232 | include/uapi/asm-generic/stat.h \ 233 | include/linux/time.h \ 234 | $(wildcard include/config/POSIX_TIMERS) \ 235 | include/linux/math64.h \ 236 | $(wildcard include/config/ARCH_SUPPORTS_INT128) \ 237 | include/vdso/math64.h \ 238 | include/linux/time64.h \ 239 | include/vdso/time64.h \ 240 | include/uapi/linux/time.h \ 241 | include/uapi/linux/time_types.h \ 242 | include/linux/time32.h \ 243 | include/linux/timex.h \ 244 | include/uapi/linux/timex.h \ 245 | arch/arm64/include/asm/timex.h \ 246 | arch/arm64/include/asm/arch_timer.h \ 247 | $(wildcard include/config/ARM_ARCH_TIMER_OOL_WORKAROUND) \ 248 | arch/arm64/include/asm/hwcap.h \ 249 | arch/arm64/include/uapi/asm/hwcap.h \ 250 | arch/arm64/include/asm/cpufeature.h \ 251 | $(wildcard include/config/ARM64_PAN) \ 252 | $(wildcard include/config/ARM64_SW_TTBR0_PAN) \ 253 | $(wildcard include/config/ARM64_SVE) \ 254 | $(wildcard include/config/ARM64_CNP) \ 255 | $(wildcard include/config/ARM64_PTR_AUTH) \ 256 | $(wildcard include/config/ARM64_MTE) \ 257 | $(wildcard include/config/ARM64_DEBUG_PRIORITY_MASKING) \ 258 | $(wildcard include/config/ARM64_BTI) \ 259 | $(wildcard include/config/ARM64_TLB_RANGE) \ 260 | $(wildcard include/config/ARM64_PA_BITS) \ 261 | $(wildcard include/config/ARM64_HW_AFDBM) \ 262 | $(wildcard include/config/ARM64_AMU_EXTN) \ 263 | include/linux/bug.h \ 264 | $(wildcard include/config/BUG_ON_DATA_CORRUPTION) \ 265 | arch/arm64/include/asm/bug.h \ 266 | arch/arm64/include/asm/asm-bug.h \ 267 | $(wildcard include/config/DEBUG_BUGVERBOSE) \ 268 | arch/arm64/include/asm/brk-imm.h \ 269 | include/asm-generic/bug.h \ 270 | $(wildcard include/config/BUG) \ 271 | $(wildcard include/config/GENERIC_BUG_RELATIVE_POINTERS) \ 272 | include/linux/instrumentation.h \ 273 | $(wildcard include/config/DEBUG_ENTRY) \ 274 | include/linux/smp.h \ 275 | $(wildcard include/config/UP_LATE_INIT) \ 276 | $(wildcard include/config/DEBUG_PREEMPT) \ 277 | include/linux/errno.h \ 278 | include/uapi/linux/errno.h \ 279 | arch/arm64/include/generated/uapi/asm/errno.h \ 280 | include/uapi/asm-generic/errno.h \ 281 | include/uapi/asm-generic/errno-base.h \ 282 | include/linux/cpumask.h \ 283 | $(wildcard include/config/CPUMASK_OFFSTACK) \ 284 | $(wildcard include/config/HOTPLUG_CPU) \ 285 | $(wildcard include/config/DEBUG_PER_CPU_MAPS) \ 286 | include/linux/threads.h \ 287 | $(wildcard include/config/BASE_SMALL) \ 288 | include/linux/bitmap.h \ 289 | include/linux/string.h \ 290 | $(wildcard include/config/BINARY_PRINTF) \ 291 | $(wildcard include/config/FORTIFY_SOURCE) \ 292 | include/uapi/linux/string.h \ 293 | arch/arm64/include/asm/string.h \ 294 | $(wildcard include/config/ARCH_HAS_UACCESS_FLUSHCACHE) \ 295 | include/linux/smp_types.h \ 296 | include/linux/llist.h \ 297 | $(wildcard include/config/ARCH_HAVE_NMI_SAFE_CMPXCHG) \ 298 | include/linux/preempt.h \ 299 | $(wildcard include/config/PREEMPT_COUNT) \ 300 | $(wildcard include/config/TRACE_PREEMPT_TOGGLE) \ 301 | $(wildcard include/config/PREEMPTION) \ 302 | $(wildcard include/config/PREEMPT_NOTIFIERS) \ 303 | arch/arm64/include/asm/preempt.h \ 304 | include/linux/thread_info.h \ 305 | $(wildcard include/config/THREAD_INFO_IN_TASK) \ 306 | $(wildcard include/config/GENERIC_ENTRY) \ 307 | $(wildcard include/config/HAVE_ARCH_WITHIN_STACK_FRAMES) \ 308 | $(wildcard include/config/HARDENED_USERCOPY) \ 309 | include/linux/restart_block.h \ 310 | arch/arm64/include/asm/current.h \ 311 | arch/arm64/include/asm/thread_info.h \ 312 | $(wildcard include/config/SHADOW_CALL_STACK) \ 313 | arch/arm64/include/asm/memory.h \ 314 | $(wildcard include/config/ARM64_VA_BITS) \ 315 | $(wildcard include/config/KASAN_SHADOW_OFFSET) \ 316 | $(wildcard include/config/KASAN) \ 317 | $(wildcard include/config/VMAP_STACK) \ 318 | $(wildcard include/config/DEBUG_VIRTUAL) \ 319 | $(wildcard include/config/EFI) \ 320 | $(wildcard include/config/ARM_GIC_V3_ITS) \ 321 | include/linux/sizes.h \ 322 | arch/arm64/include/asm/page-def.h \ 323 | $(wildcard include/config/ARM64_PAGE_SHIFT) \ 324 | include/linux/mmdebug.h \ 325 | $(wildcard include/config/DEBUG_VM) \ 326 | $(wildcard include/config/DEBUG_VM_PGFLAGS) \ 327 | include/asm-generic/memory_model.h \ 328 | $(wildcard include/config/FLATMEM) \ 329 | $(wildcard include/config/SPARSEMEM_VMEMMAP) \ 330 | $(wildcard include/config/SPARSEMEM) \ 331 | include/linux/pfn.h \ 332 | arch/arm64/include/asm/stack_pointer.h \ 333 | arch/arm64/include/asm/smp.h \ 334 | $(wildcard include/config/ARM64_ACPI_PARKING_PROTOCOL) \ 335 | arch/arm64/include/asm/percpu.h \ 336 | include/asm-generic/percpu.h \ 337 | $(wildcard include/config/HAVE_SETUP_PER_CPU_AREA) \ 338 | include/linux/percpu-defs.h \ 339 | $(wildcard include/config/DEBUG_FORCE_WEAK_PER_CPU) \ 340 | $(wildcard include/config/AMD_MEM_ENCRYPT) \ 341 | include/clocksource/arm_arch_timer.h \ 342 | $(wildcard include/config/ARM_ARCH_TIMER) \ 343 | include/linux/timecounter.h \ 344 | include/asm-generic/timex.h \ 345 | include/vdso/time32.h \ 346 | include/vdso/time.h \ 347 | arch/arm64/include/asm/compat.h \ 348 | include/asm-generic/compat.h \ 349 | $(wildcard include/config/COMPAT_FOR_U64_ALIGNMENT) \ 350 | include/linux/sched.h \ 351 | $(wildcard include/config/VIRT_CPU_ACCOUNTING_NATIVE) \ 352 | $(wildcard include/config/SCHED_INFO) \ 353 | $(wildcard include/config/SCHEDSTATS) \ 354 | $(wildcard include/config/FAIR_GROUP_SCHED) \ 355 | $(wildcard include/config/RT_GROUP_SCHED) \ 356 | $(wildcard include/config/RT_MUTEXES) \ 357 | $(wildcard include/config/UCLAMP_TASK) \ 358 | $(wildcard include/config/UCLAMP_BUCKETS_COUNT) \ 359 | $(wildcard include/config/KMAP_LOCAL) \ 360 | $(wildcard include/config/SCHED_CORE) \ 361 | $(wildcard include/config/CGROUP_SCHED) \ 362 | $(wildcard include/config/BLK_DEV_IO_TRACE) \ 363 | $(wildcard include/config/PREEMPT_RCU) \ 364 | $(wildcard include/config/TASKS_RCU) \ 365 | $(wildcard include/config/TASKS_TRACE_RCU) \ 366 | $(wildcard include/config/PSI) \ 367 | $(wildcard include/config/MEMCG) \ 368 | $(wildcard include/config/COMPAT_BRK) \ 369 | $(wildcard include/config/CGROUPS) \ 370 | $(wildcard include/config/BLK_CGROUP) \ 371 | $(wildcard include/config/PAGE_OWNER) \ 372 | $(wildcard include/config/EVENTFD) \ 373 | $(wildcard include/config/STACKPROTECTOR) \ 374 | $(wildcard include/config/ARCH_HAS_SCALED_CPUTIME) \ 375 | $(wildcard include/config/VIRT_CPU_ACCOUNTING_GEN) \ 376 | $(wildcard include/config/NO_HZ_FULL) \ 377 | $(wildcard include/config/POSIX_CPUTIMERS) \ 378 | $(wildcard include/config/POSIX_CPU_TIMERS_TASK_WORK) \ 379 | $(wildcard include/config/KEYS) \ 380 | $(wildcard include/config/SYSVIPC) \ 381 | $(wildcard include/config/DETECT_HUNG_TASK) \ 382 | $(wildcard include/config/IO_URING) \ 383 | $(wildcard include/config/AUDIT) \ 384 | $(wildcard include/config/AUDITSYSCALL) \ 385 | $(wildcard include/config/DEBUG_MUTEXES) \ 386 | $(wildcard include/config/TRACE_IRQFLAGS) \ 387 | $(wildcard include/config/UBSAN) \ 388 | $(wildcard include/config/UBSAN_TRAP) \ 389 | $(wildcard include/config/BLOCK) \ 390 | $(wildcard include/config/COMPACTION) \ 391 | $(wildcard include/config/TASK_XACCT) \ 392 | $(wildcard include/config/CPUSETS) \ 393 | $(wildcard include/config/X86_CPU_RESCTRL) \ 394 | $(wildcard include/config/FUTEX) \ 395 | $(wildcard include/config/PERF_EVENTS) \ 396 | $(wildcard include/config/NUMA) \ 397 | $(wildcard include/config/NUMA_BALANCING) \ 398 | $(wildcard include/config/RSEQ) \ 399 | $(wildcard include/config/TASK_DELAY_ACCT) \ 400 | $(wildcard include/config/FAULT_INJECTION) \ 401 | $(wildcard include/config/LATENCYTOP) \ 402 | $(wildcard include/config/KUNIT) \ 403 | $(wildcard include/config/FUNCTION_GRAPH_TRACER) \ 404 | $(wildcard include/config/UPROBES) \ 405 | $(wildcard include/config/BCACHE) \ 406 | $(wildcard include/config/SECURITY) \ 407 | $(wildcard include/config/BPF_SYSCALL) \ 408 | $(wildcard include/config/GCC_PLUGIN_STACKLEAK) \ 409 | $(wildcard include/config/X86_MCE) \ 410 | $(wildcard include/config/KRETPROBES) \ 411 | $(wildcard include/config/ARCH_HAS_PARANOID_L1D_FLUSH) \ 412 | $(wildcard include/config/ARCH_TASK_STRUCT_ON_STACK) \ 413 | $(wildcard include/config/DEBUG_RSEQ) \ 414 | include/uapi/linux/sched.h \ 415 | include/linux/pid.h \ 416 | include/linux/rculist.h \ 417 | $(wildcard include/config/PROVE_RCU_LIST) \ 418 | include/linux/rcupdate.h \ 419 | $(wildcard include/config/TINY_RCU) \ 420 | $(wildcard include/config/TASKS_RCU_GENERIC) \ 421 | $(wildcard include/config/RCU_STALL_COMMON) \ 422 | $(wildcard include/config/RCU_NOCB_CPU) \ 423 | $(wildcard include/config/TASKS_RUDE_RCU) \ 424 | $(wildcard include/config/TREE_RCU) \ 425 | $(wildcard include/config/DEBUG_OBJECTS_RCU_HEAD) \ 426 | $(wildcard include/config/PROVE_RCU) \ 427 | $(wildcard include/config/ARCH_WEAK_RELEASE_ACQUIRE) \ 428 | include/linux/irqflags.h \ 429 | $(wildcard include/config/IRQSOFF_TRACER) \ 430 | $(wildcard include/config/PREEMPT_TRACER) \ 431 | $(wildcard include/config/DEBUG_IRQFLAGS) \ 432 | $(wildcard include/config/TRACE_IRQFLAGS_SUPPORT) \ 433 | arch/arm64/include/asm/irqflags.h \ 434 | arch/arm64/include/asm/ptrace.h \ 435 | arch/arm64/include/uapi/asm/ptrace.h \ 436 | arch/arm64/include/uapi/asm/sve_context.h \ 437 | include/linux/bottom_half.h \ 438 | include/linux/lockdep.h \ 439 | $(wildcard include/config/DEBUG_LOCKING_API_SELFTESTS) \ 440 | arch/arm64/include/asm/processor.h \ 441 | $(wildcard include/config/KUSER_HELPERS) \ 442 | $(wildcard include/config/ARM64_FORCE_52BIT) \ 443 | $(wildcard include/config/HAVE_HW_BREAKPOINT) \ 444 | $(wildcard include/config/ARM64_PTR_AUTH_KERNEL) \ 445 | $(wildcard include/config/ARM64_TAGGED_ADDR_ABI) \ 446 | include/vdso/processor.h \ 447 | arch/arm64/include/asm/vdso/processor.h \ 448 | arch/arm64/include/asm/hw_breakpoint.h \ 449 | arch/arm64/include/asm/virt.h \ 450 | $(wildcard include/config/KVM) \ 451 | arch/arm64/include/asm/sections.h \ 452 | include/asm-generic/sections.h \ 453 | arch/arm64/include/asm/kasan.h \ 454 | arch/arm64/include/asm/mte-kasan.h \ 455 | arch/arm64/include/asm/mte-def.h \ 456 | arch/arm64/include/asm/pgtable-types.h \ 457 | $(wildcard include/config/PGTABLE_LEVELS) \ 458 | include/asm-generic/pgtable-nopud.h \ 459 | include/asm-generic/pgtable-nop4d.h \ 460 | arch/arm64/include/asm/pgtable-hwdef.h \ 461 | $(wildcard include/config/ARM64_CONT_PTE_SHIFT) \ 462 | $(wildcard include/config/ARM64_CONT_PMD_SHIFT) \ 463 | $(wildcard include/config/ARM64_VA_BITS_52) \ 464 | arch/arm64/include/asm/pointer_auth.h \ 465 | include/uapi/linux/prctl.h \ 466 | include/linux/random.h \ 467 | $(wildcard include/config/ARCH_RANDOM) \ 468 | include/linux/once.h \ 469 | include/uapi/linux/random.h \ 470 | include/uapi/linux/ioctl.h \ 471 | arch/arm64/include/generated/uapi/asm/ioctl.h \ 472 | include/asm-generic/ioctl.h \ 473 | include/uapi/asm-generic/ioctl.h \ 474 | include/linux/irqnr.h \ 475 | include/uapi/linux/irqnr.h \ 476 | include/linux/prandom.h \ 477 | include/linux/percpu.h \ 478 | $(wildcard include/config/NEED_PER_CPU_EMBED_FIRST_CHUNK) \ 479 | $(wildcard include/config/NEED_PER_CPU_PAGE_FIRST_CHUNK) \ 480 | arch/arm64/include/asm/archrandom.h \ 481 | include/linux/arm-smccc.h \ 482 | $(wildcard include/config/ARM64) \ 483 | $(wildcard include/config/HAVE_ARM_SMCCC) \ 484 | $(wildcard include/config/ARM) \ 485 | arch/arm64/include/asm/spectre.h \ 486 | arch/arm64/include/asm/fpsimd.h \ 487 | arch/arm64/include/uapi/asm/sigcontext.h \ 488 | include/linux/rcutree.h \ 489 | include/linux/wait.h \ 490 | include/linux/spinlock.h \ 491 | arch/arm64/include/generated/asm/mmiowb.h \ 492 | include/asm-generic/mmiowb.h \ 493 | $(wildcard include/config/MMIOWB) \ 494 | arch/arm64/include/asm/spinlock.h \ 495 | arch/arm64/include/generated/asm/qspinlock.h \ 496 | include/asm-generic/qspinlock.h \ 497 | arch/arm64/include/generated/asm/qrwlock.h \ 498 | include/asm-generic/qrwlock.h \ 499 | include/linux/rwlock.h \ 500 | $(wildcard include/config/PREEMPT) \ 501 | include/linux/spinlock_api_smp.h \ 502 | $(wildcard include/config/INLINE_SPIN_LOCK) \ 503 | $(wildcard include/config/INLINE_SPIN_LOCK_BH) \ 504 | $(wildcard include/config/INLINE_SPIN_LOCK_IRQ) \ 505 | $(wildcard include/config/INLINE_SPIN_LOCK_IRQSAVE) \ 506 | $(wildcard include/config/INLINE_SPIN_TRYLOCK) \ 507 | $(wildcard include/config/INLINE_SPIN_TRYLOCK_BH) \ 508 | $(wildcard include/config/UNINLINE_SPIN_UNLOCK) \ 509 | $(wildcard include/config/INLINE_SPIN_UNLOCK_BH) \ 510 | $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQ) \ 511 | $(wildcard include/config/INLINE_SPIN_UNLOCK_IRQRESTORE) \ 512 | $(wildcard include/config/GENERIC_LOCKBREAK) \ 513 | include/linux/rwlock_api_smp.h \ 514 | $(wildcard include/config/INLINE_READ_LOCK) \ 515 | $(wildcard include/config/INLINE_WRITE_LOCK) \ 516 | $(wildcard include/config/INLINE_READ_LOCK_BH) \ 517 | $(wildcard include/config/INLINE_WRITE_LOCK_BH) \ 518 | $(wildcard include/config/INLINE_READ_LOCK_IRQ) \ 519 | $(wildcard include/config/INLINE_WRITE_LOCK_IRQ) \ 520 | $(wildcard include/config/INLINE_READ_LOCK_IRQSAVE) \ 521 | $(wildcard include/config/INLINE_WRITE_LOCK_IRQSAVE) \ 522 | $(wildcard include/config/INLINE_READ_TRYLOCK) \ 523 | $(wildcard include/config/INLINE_WRITE_TRYLOCK) \ 524 | $(wildcard include/config/INLINE_READ_UNLOCK) \ 525 | $(wildcard include/config/INLINE_WRITE_UNLOCK) \ 526 | $(wildcard include/config/INLINE_READ_UNLOCK_BH) \ 527 | $(wildcard include/config/INLINE_WRITE_UNLOCK_BH) \ 528 | $(wildcard include/config/INLINE_READ_UNLOCK_IRQ) \ 529 | $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQ) \ 530 | $(wildcard include/config/INLINE_READ_UNLOCK_IRQRESTORE) \ 531 | $(wildcard include/config/INLINE_WRITE_UNLOCK_IRQRESTORE) \ 532 | include/uapi/linux/wait.h \ 533 | include/linux/refcount.h \ 534 | include/linux/sem.h \ 535 | include/uapi/linux/sem.h \ 536 | include/linux/ipc.h \ 537 | include/linux/uidgid.h \ 538 | $(wildcard include/config/MULTIUSER) \ 539 | $(wildcard include/config/USER_NS) \ 540 | include/linux/highuid.h \ 541 | include/linux/rhashtable-types.h \ 542 | include/linux/mutex.h \ 543 | $(wildcard include/config/MUTEX_SPIN_ON_OWNER) \ 544 | include/linux/osq_lock.h \ 545 | include/linux/debug_locks.h \ 546 | include/linux/workqueue.h \ 547 | $(wildcard include/config/DEBUG_OBJECTS_WORK) \ 548 | $(wildcard include/config/FREEZER) \ 549 | $(wildcard include/config/WQ_WATCHDOG) \ 550 | include/linux/timer.h \ 551 | $(wildcard include/config/DEBUG_OBJECTS_TIMERS) \ 552 | $(wildcard include/config/NO_HZ_COMMON) \ 553 | include/linux/ktime.h \ 554 | include/linux/jiffies.h \ 555 | include/vdso/jiffies.h \ 556 | include/generated/timeconst.h \ 557 | include/vdso/ktime.h \ 558 | include/linux/timekeeping.h \ 559 | $(wildcard include/config/GENERIC_CMOS_UPDATE) \ 560 | include/linux/clocksource_ids.h \ 561 | include/linux/debugobjects.h \ 562 | $(wildcard include/config/DEBUG_OBJECTS) \ 563 | $(wildcard include/config/DEBUG_OBJECTS_FREE) \ 564 | include/uapi/linux/ipc.h \ 565 | arch/arm64/include/generated/uapi/asm/ipcbuf.h \ 566 | include/uapi/asm-generic/ipcbuf.h \ 567 | arch/arm64/include/generated/uapi/asm/sembuf.h \ 568 | include/uapi/asm-generic/sembuf.h \ 569 | include/linux/shm.h \ 570 | arch/arm64/include/asm/page.h \ 571 | include/linux/personality.h \ 572 | include/uapi/linux/personality.h \ 573 | include/asm-generic/getorder.h \ 574 | include/uapi/linux/shm.h \ 575 | include/uapi/asm-generic/hugetlb_encode.h \ 576 | arch/arm64/include/generated/uapi/asm/shmbuf.h \ 577 | include/uapi/asm-generic/shmbuf.h \ 578 | arch/arm64/include/asm/shmparam.h \ 579 | include/asm-generic/shmparam.h \ 580 | include/linux/plist.h \ 581 | $(wildcard include/config/DEBUG_PLIST) \ 582 | include/linux/hrtimer.h \ 583 | $(wildcard include/config/HIGH_RES_TIMERS) \ 584 | $(wildcard include/config/TIME_LOW_RES) \ 585 | $(wildcard include/config/TIMERFD) \ 586 | include/linux/hrtimer_defs.h \ 587 | include/linux/rbtree.h \ 588 | include/linux/rbtree_types.h \ 589 | include/linux/seqlock.h \ 590 | include/linux/ww_mutex.h \ 591 | $(wildcard include/config/DEBUG_RT_MUTEXES) \ 592 | $(wildcard include/config/DEBUG_WW_MUTEX_SLOWPATH) \ 593 | include/linux/rtmutex.h \ 594 | include/linux/timerqueue.h \ 595 | include/linux/seccomp.h \ 596 | $(wildcard include/config/SECCOMP) \ 597 | $(wildcard include/config/HAVE_ARCH_SECCOMP_FILTER) \ 598 | $(wildcard include/config/SECCOMP_FILTER) \ 599 | $(wildcard include/config/CHECKPOINT_RESTORE) \ 600 | $(wildcard include/config/SECCOMP_CACHE_DEBUG) \ 601 | include/uapi/linux/seccomp.h \ 602 | arch/arm64/include/asm/seccomp.h \ 603 | arch/arm64/include/asm/unistd.h \ 604 | arch/arm64/include/uapi/asm/unistd.h \ 605 | include/uapi/asm-generic/unistd.h \ 606 | include/asm-generic/seccomp.h \ 607 | include/uapi/linux/unistd.h \ 608 | include/linux/nodemask.h \ 609 | $(wildcard include/config/HIGHMEM) \ 610 | include/linux/numa.h \ 611 | $(wildcard include/config/NODES_SHIFT) \ 612 | $(wildcard include/config/NUMA_KEEP_MEMINFO) \ 613 | include/linux/resource.h \ 614 | include/uapi/linux/resource.h \ 615 | arch/arm64/include/generated/uapi/asm/resource.h \ 616 | include/asm-generic/resource.h \ 617 | include/uapi/asm-generic/resource.h \ 618 | include/linux/latencytop.h \ 619 | include/linux/sched/prio.h \ 620 | include/linux/sched/types.h \ 621 | include/linux/signal_types.h \ 622 | $(wildcard include/config/OLD_SIGACTION) \ 623 | include/uapi/linux/signal.h \ 624 | arch/arm64/include/asm/signal.h \ 625 | arch/arm64/include/uapi/asm/signal.h \ 626 | include/asm-generic/signal.h \ 627 | include/uapi/asm-generic/signal.h \ 628 | include/uapi/asm-generic/signal-defs.h \ 629 | arch/arm64/include/generated/uapi/asm/siginfo.h \ 630 | include/uapi/asm-generic/siginfo.h \ 631 | arch/arm64/include/generated/uapi/asm/siginfo.h \ 632 | include/linux/syscall_user_dispatch.h \ 633 | include/linux/mm_types_task.h \ 634 | $(wildcard include/config/ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH) \ 635 | $(wildcard include/config/SPLIT_PTLOCK_CPUS) \ 636 | $(wildcard include/config/ARCH_ENABLE_SPLIT_PMD_PTLOCK) \ 637 | include/linux/task_io_accounting.h \ 638 | $(wildcard include/config/TASK_IO_ACCOUNTING) \ 639 | include/linux/posix-timers.h \ 640 | include/linux/alarmtimer.h \ 641 | $(wildcard include/config/RTC_CLASS) \ 642 | include/linux/task_work.h \ 643 | include/uapi/linux/rseq.h \ 644 | include/linux/kcsan.h \ 645 | arch/arm64/include/generated/asm/kmap_size.h \ 646 | include/asm-generic/kmap_size.h \ 647 | $(wildcard include/config/DEBUG_KMAP_LOCAL) \ 648 | include/linux/sched/task_stack.h \ 649 | $(wildcard include/config/STACK_GROWSUP) \ 650 | $(wildcard include/config/DEBUG_STACK_USAGE) \ 651 | include/uapi/linux/magic.h \ 652 | include/uapi/linux/stat.h \ 653 | include/linux/buildid.h \ 654 | $(wildcard include/config/CRASH_CORE) \ 655 | include/linux/mm_types.h \ 656 | $(wildcard include/config/HAVE_ALIGNED_STRUCT_PAGE) \ 657 | $(wildcard include/config/USERFAULTFD) \ 658 | $(wildcard include/config/SWAP) \ 659 | $(wildcard include/config/HAVE_ARCH_COMPAT_MMAP_BASES) \ 660 | $(wildcard include/config/MEMBARRIER) \ 661 | $(wildcard include/config/AIO) \ 662 | $(wildcard include/config/MMU_NOTIFIER) \ 663 | $(wildcard include/config/TRANSPARENT_HUGEPAGE) \ 664 | $(wildcard include/config/HUGETLB_PAGE) \ 665 | $(wildcard include/config/IOMMU_SUPPORT) \ 666 | include/linux/auxvec.h \ 667 | include/uapi/linux/auxvec.h \ 668 | arch/arm64/include/uapi/asm/auxvec.h \ 669 | include/linux/rwsem.h \ 670 | $(wildcard include/config/RWSEM_SPIN_ON_OWNER) \ 671 | $(wildcard include/config/DEBUG_RWSEMS) \ 672 | include/linux/err.h \ 673 | include/linux/completion.h \ 674 | include/linux/swait.h \ 675 | include/linux/uprobes.h \ 676 | include/linux/page-flags-layout.h \ 677 | include/generated/bounds.h \ 678 | arch/arm64/include/asm/sparsemem.h \ 679 | arch/arm64/include/asm/mmu.h \ 680 | include/linux/kmod.h \ 681 | include/linux/umh.h \ 682 | include/linux/gfp.h \ 683 | $(wildcard include/config/ZONE_DMA) \ 684 | $(wildcard include/config/ZONE_DMA32) \ 685 | $(wildcard include/config/ZONE_DEVICE) \ 686 | $(wildcard include/config/PM_SLEEP) \ 687 | $(wildcard include/config/CONTIG_ALLOC) \ 688 | $(wildcard include/config/CMA) \ 689 | include/linux/mmzone.h \ 690 | $(wildcard include/config/FORCE_MAX_ZONEORDER) \ 691 | $(wildcard include/config/MEMORY_ISOLATION) \ 692 | $(wildcard include/config/ZSMALLOC) \ 693 | $(wildcard include/config/MEMORY_HOTPLUG) \ 694 | $(wildcard include/config/PAGE_EXTENSION) \ 695 | $(wildcard include/config/DEFERRED_STRUCT_PAGE_INIT) \ 696 | $(wildcard include/config/HAVE_MEMORYLESS_NODES) \ 697 | $(wildcard include/config/SPARSEMEM_EXTREME) \ 698 | $(wildcard include/config/HAVE_ARCH_PFN_VALID) \ 699 | include/linux/pageblock-flags.h \ 700 | $(wildcard include/config/HUGETLB_PAGE_SIZE_VARIABLE) \ 701 | include/linux/page-flags.h \ 702 | $(wildcard include/config/ARCH_USES_PG_UNCACHED) \ 703 | $(wildcard include/config/MEMORY_FAILURE) \ 704 | $(wildcard include/config/PAGE_IDLE_FLAG) \ 705 | $(wildcard include/config/THP_SWAP) \ 706 | $(wildcard include/config/KSM) \ 707 | include/linux/local_lock.h \ 708 | include/linux/local_lock_internal.h \ 709 | include/linux/memory_hotplug.h \ 710 | $(wildcard include/config/ARCH_HAS_ADD_PAGES) \ 711 | $(wildcard include/config/HAVE_ARCH_NODEDATA_EXTENSION) \ 712 | $(wildcard include/config/MEMORY_HOTREMOVE) \ 713 | include/linux/notifier.h \ 714 | include/linux/srcu.h \ 715 | $(wildcard include/config/TINY_SRCU) \ 716 | $(wildcard include/config/SRCU) \ 717 | include/linux/rcu_segcblist.h \ 718 | include/linux/srcutree.h \ 719 | include/linux/rcu_node_tree.h \ 720 | $(wildcard include/config/RCU_FANOUT) \ 721 | $(wildcard include/config/RCU_FANOUT_LEAF) \ 722 | include/linux/topology.h \ 723 | $(wildcard include/config/USE_PERCPU_NUMA_NODE_ID) \ 724 | $(wildcard include/config/SCHED_SMT) \ 725 | include/linux/arch_topology.h \ 726 | $(wildcard include/config/GENERIC_ARCH_TOPOLOGY) \ 727 | arch/arm64/include/asm/topology.h \ 728 | include/asm-generic/topology.h \ 729 | include/linux/sysctl.h \ 730 | $(wildcard include/config/SYSCTL) \ 731 | include/uapi/linux/sysctl.h \ 732 | include/linux/elf.h \ 733 | $(wildcard include/config/ARCH_USE_GNU_PROPERTY) \ 734 | $(wildcard include/config/ARCH_HAVE_ELF_PROT) \ 735 | arch/arm64/include/asm/elf.h \ 736 | $(wildcard include/config/COMPAT_VDSO) \ 737 | arch/arm64/include/generated/asm/user.h \ 738 | include/asm-generic/user.h \ 739 | include/uapi/linux/elf.h \ 740 | include/uapi/linux/elf-em.h \ 741 | include/linux/fs.h \ 742 | $(wildcard include/config/READ_ONLY_THP_FOR_FS) \ 743 | $(wildcard include/config/FS_POSIX_ACL) \ 744 | $(wildcard include/config/CGROUP_WRITEBACK) \ 745 | $(wildcard include/config/IMA) \ 746 | $(wildcard include/config/FILE_LOCKING) \ 747 | $(wildcard include/config/FSNOTIFY) \ 748 | $(wildcard include/config/FS_ENCRYPTION) \ 749 | $(wildcard include/config/FS_VERITY) \ 750 | $(wildcard include/config/EPOLL) \ 751 | $(wildcard include/config/UNICODE) \ 752 | $(wildcard include/config/QUOTA) \ 753 | $(wildcard include/config/FS_DAX) \ 754 | $(wildcard include/config/MIGRATION) \ 755 | include/linux/wait_bit.h \ 756 | include/linux/kdev_t.h \ 757 | include/uapi/linux/kdev_t.h \ 758 | include/linux/dcache.h \ 759 | include/linux/rculist_bl.h \ 760 | include/linux/list_bl.h \ 761 | include/linux/bit_spinlock.h \ 762 | include/linux/lockref.h \ 763 | $(wildcard include/config/ARCH_USE_CMPXCHG_LOCKREF) \ 764 | include/linux/stringhash.h \ 765 | $(wildcard include/config/DCACHE_WORD_ACCESS) \ 766 | include/linux/hash.h \ 767 | $(wildcard include/config/HAVE_ARCH_HASH) \ 768 | include/linux/path.h \ 769 | include/linux/list_lru.h \ 770 | $(wildcard include/config/MEMCG_KMEM) \ 771 | include/linux/shrinker.h \ 772 | include/linux/radix-tree.h \ 773 | include/linux/xarray.h \ 774 | $(wildcard include/config/XARRAY_MULTI) \ 775 | include/linux/kconfig.h \ 776 | include/linux/capability.h \ 777 | include/uapi/linux/capability.h \ 778 | include/linux/semaphore.h \ 779 | include/linux/fcntl.h \ 780 | $(wildcard include/config/ARCH_32BIT_OFF_T) \ 781 | include/uapi/linux/fcntl.h \ 782 | arch/arm64/include/uapi/asm/fcntl.h \ 783 | include/uapi/asm-generic/fcntl.h \ 784 | include/uapi/linux/openat2.h \ 785 | include/linux/migrate_mode.h \ 786 | include/linux/percpu-rwsem.h \ 787 | include/linux/rcuwait.h \ 788 | include/linux/sched/signal.h \ 789 | $(wildcard include/config/SCHED_AUTOGROUP) \ 790 | $(wildcard include/config/BSD_PROCESS_ACCT) \ 791 | $(wildcard include/config/TASKSTATS) \ 792 | include/linux/signal.h \ 793 | $(wildcard include/config/PROC_FS) \ 794 | include/linux/sched/jobctl.h \ 795 | include/linux/sched/task.h \ 796 | $(wildcard include/config/HAVE_EXIT_THREAD) \ 797 | $(wildcard include/config/ARCH_WANTS_DYNAMIC_TASK_STRUCT) \ 798 | $(wildcard include/config/HAVE_ARCH_THREAD_STRUCT_WHITELIST) \ 799 | include/linux/uaccess.h \ 800 | $(wildcard include/config/SET_FS) \ 801 | include/linux/fault-inject-usercopy.h \ 802 | $(wildcard include/config/FAULT_INJECTION_USERCOPY) \ 803 | arch/arm64/include/asm/uaccess.h \ 804 | arch/arm64/include/asm/kernel-pgtable.h \ 805 | $(wildcard include/config/RANDOMIZE_BASE) \ 806 | arch/arm64/include/asm/mte.h \ 807 | include/linux/bitfield.h \ 808 | arch/arm64/include/asm/extable.h \ 809 | $(wildcard include/config/BPF_JIT) \ 810 | include/linux/cred.h \ 811 | $(wildcard include/config/DEBUG_CREDENTIALS) \ 812 | include/linux/key.h \ 813 | $(wildcard include/config/KEY_NOTIFICATIONS) \ 814 | $(wildcard include/config/NET) \ 815 | include/linux/assoc_array.h \ 816 | $(wildcard include/config/ASSOCIATIVE_ARRAY) \ 817 | include/linux/sched/user.h \ 818 | $(wildcard include/config/WATCH_QUEUE) \ 819 | include/linux/percpu_counter.h \ 820 | include/linux/ratelimit.h \ 821 | include/linux/rcu_sync.h \ 822 | include/linux/delayed_call.h \ 823 | include/linux/uuid.h \ 824 | include/uapi/linux/uuid.h \ 825 | include/linux/errseq.h \ 826 | include/linux/ioprio.h \ 827 | include/linux/sched/rt.h \ 828 | include/linux/iocontext.h \ 829 | include/uapi/linux/ioprio.h \ 830 | include/linux/fs_types.h \ 831 | include/linux/mount.h \ 832 | include/uapi/linux/fs.h \ 833 | include/linux/quota.h \ 834 | $(wildcard include/config/QUOTA_NETLINK_INTERFACE) \ 835 | include/uapi/linux/dqblk_xfs.h \ 836 | include/linux/dqblk_v1.h \ 837 | include/linux/dqblk_v2.h \ 838 | include/linux/dqblk_qtree.h \ 839 | include/linux/projid.h \ 840 | include/uapi/linux/quota.h \ 841 | include/linux/nfs_fs_i.h \ 842 | include/linux/kobject.h \ 843 | $(wildcard include/config/UEVENT_HELPER) \ 844 | $(wildcard include/config/DEBUG_KOBJECT_RELEASE) \ 845 | include/linux/sysfs.h \ 846 | include/linux/kernfs.h \ 847 | $(wildcard include/config/KERNFS) \ 848 | include/linux/idr.h \ 849 | include/linux/kobject_ns.h \ 850 | include/linux/kref.h \ 851 | include/linux/moduleparam.h \ 852 | $(wildcard include/config/ALPHA) \ 853 | $(wildcard include/config/IA64) \ 854 | $(wildcard include/config/PPC64) \ 855 | include/linux/rbtree_latch.h \ 856 | include/linux/error-injection.h \ 857 | include/asm-generic/error-injection.h \ 858 | include/linux/tracepoint-defs.h \ 859 | include/linux/static_key.h \ 860 | include/linux/cfi.h \ 861 | $(wildcard include/config/CFI_CLANG_SHADOW) \ 862 | arch/arm64/include/asm/module.h \ 863 | $(wildcard include/config/ARM64_MODULE_PLTS) \ 864 | $(wildcard include/config/DYNAMIC_FTRACE) \ 865 | $(wildcard include/config/ARM64_ERRATUM_843419) \ 866 | include/asm-generic/module.h \ 867 | $(wildcard include/config/HAVE_MOD_ARCH_SPECIFIC) \ 868 | $(wildcard include/config/MODULES_USE_ELF_REL) \ 869 | $(wildcard include/config/MODULES_USE_ELF_RELA) \ 870 | include/linux/build-salt.h \ 871 | $(wildcard include/config/BUILD_SALT) \ 872 | include/linux/elfnote.h \ 873 | include/linux/elfnote-lto.h \ 874 | include/linux/vermagic.h \ 875 | include/generated/utsrelease.h \ 876 | arch/arm64/include/asm/vermagic.h \ 877 | 878 | /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o: $(deps_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o) 879 | 880 | $(deps_/media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.mod.o): 881 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Driver for InnoMaker Co.ltd MIPI OV9281 Sensor module - CMOS Image Sensor from Omnivision 3 | * 4 | * Copyright (C) 2019, Jack Yang 5 | * based on 6 | * 7 | * IMX219 driver, Guennadi Liakhovetski 8 | * 9 | * Copyright (C) 2014, Andrew Chew 10 | * 11 | * This program is free software; you can redistribute it and/or modify 12 | * it under the terms of the GNU General Public License version 2 as 13 | * published by the Free Software Foundation. 14 | */ 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | /* OV9281 supported geometry */ 33 | #define OV9281_TABLE_END 0xFFFF 34 | 35 | /* In dB */ 36 | #define OV9281_DIGITAL_GAIN_MIN 0x00 37 | #define OV9281_DIGITAL_GAIN_MAX 0xFE 38 | #define OV9281_DIGITAL_GAIN_DEFAULT 0x10 39 | 40 | /* In n*8721 nsec */ 41 | #define OV9281_DIGITAL_EXPOSURE_MIN 0x00000010 42 | #define OV9281_DIGITAL_EXPOSURE_MAX 0x00003750 43 | #define OV9281_DIGITAL_EXPOSURE_DEFAULT 0x00002A90 44 | 45 | /*Sensor work Mode - default 8-Bit Streaming */ 46 | static int sensor_mode = 1; 47 | module_param(sensor_mode, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); 48 | MODULE_PARM_DESC(sensor_mode, "Sensor Work Mode: 0=10bit_stream 1=8bit_stream 2=10bit_ext_trig 3=8bit_ext_trig 4=720_10_stream 5=720_8_stream 6=720_10_ext_trig 7=720_8_ext_trig 8=640x400_10_stream 9=640x400_8_stream 10=640x400_10_ext_trig 11=640x400_8_ext_trig 12=320x200_8_stream 13=320x200_8_ext_trig"); 49 | 50 | 51 | 52 | /* Addresses to scan */ 53 | static const unsigned short normal_i2c[] = { 0x60, 0x60 , I2C_CLIENT_END }; 54 | 55 | static const s64 link_freq_menu_items[] = { 56 | 800000000, 57 | }; 58 | 59 | struct ov9281_reg { 60 | u16 addr; 61 | u8 val; 62 | }; 63 | 64 | struct ov9281_mode { 65 | u32 sensor_mode; 66 | u32 sensor_depth; 67 | u32 sensor_ext_trig; 68 | u32 width; 69 | u32 height; 70 | u32 max_fps; 71 | u32 hts_def; 72 | u32 vts_def; 73 | const struct ov9281_reg *reg_list; 74 | }; 75 | 76 | 77 | 78 | /* 79 | * Xclk 24Mhz 80 | * max_framerate 120fps 81 | * mipi_datarate per lane 800Mbps 82 | */ 83 | static const struct ov9281_reg ov9281_init_tab_1280_800_120fps[] = { 84 | 85 | {OV9281_TABLE_END, 0x00}, 86 | }; 87 | 88 | //ext trigger mode 89 | static const struct ov9281_reg ov9281_init_tab_1280_800_ext[] = { 90 | 91 | {OV9281_TABLE_END, 0x00}, 92 | }; 93 | 94 | //120fps raw8 95 | static const struct ov9281_reg ov9281_init_tab_8_1280_800_120fps[] = { 96 | 97 | {OV9281_TABLE_END, 0x00}, 98 | }; 99 | 100 | //ext trigger mode raw8 101 | static const struct ov9281_reg ov9281_init_tab_8_1280_800_ext[] = { 102 | 103 | {OV9281_TABLE_END, 0x00}, 104 | }; 105 | 106 | static const struct ov9281_reg ov9281_init_tab_1280_720_130fps[] = { 107 | 108 | {OV9281_TABLE_END, 0x00}, 109 | }; 110 | 111 | static const struct ov9281_reg ov9281_init_tab_8_1280_720_130fps[] = { 112 | 113 | {OV9281_TABLE_END, 0x00}, 114 | }; 115 | 116 | static const struct ov9281_reg ov9281_init_tab_1280_720_ext[] = { 117 | 118 | {OV9281_TABLE_END, 0x00}, 119 | }; 120 | 121 | 122 | static const struct ov9281_reg ov9281_init_tab_8_1280_720_ext[] = { 123 | 124 | {OV9281_TABLE_END, 0x00}, 125 | }; 126 | 127 | static const struct ov9281_reg ov9281_init_tab_640_400_210fps[] = { 128 | 129 | {0x4507,0x03}, 130 | {0x4509,0x80}, 131 | {OV9281_TABLE_END, 0x00}, 132 | }; 133 | 134 | static const struct ov9281_reg ov9281_init_tab_8_640_400_210fps[] = { 135 | 136 | {0x4507,0x03}, 137 | {0x4509,0x80}, 138 | {OV9281_TABLE_END, 0x00}, 139 | }; 140 | 141 | static const struct ov9281_reg ov9281_init_tab_640_400_ext[] = { 142 | 143 | {0x4507,0x03}, 144 | {0x4509,0x80}, 145 | {OV9281_TABLE_END, 0x00}, 146 | }; 147 | 148 | 149 | static const struct ov9281_reg ov9281_init_tab_8_640_400_ext[] = { 150 | 151 | {0x4507,0x03}, 152 | {0x4509,0x80}, 153 | {OV9281_TABLE_END, 0x00}, 154 | }; 155 | 156 | 157 | static const struct ov9281_reg ov9281_init_tab_8_320_200_480fps[] = { 158 | 159 | {OV9281_TABLE_END, 0x00}, 160 | }; 161 | 162 | 163 | static const struct ov9281_reg start[] = { 164 | {0x0100, 0x01}, /* mode select streaming on */ 165 | {OV9281_TABLE_END, 0x00} 166 | }; 167 | 168 | static const struct ov9281_reg stop[] = { 169 | {0x0100, 0x00}, /* mode select streaming off */ 170 | {OV9281_TABLE_END, 0x00} 171 | }; 172 | 173 | 174 | #define SIZEOF_I2C_TRANSBUF 32 175 | 176 | struct inno_rom_table { 177 | char magic[12]; 178 | char manuf[32]; 179 | u16 manuf_id; 180 | char sen_manuf[8]; 181 | char sen_type[16]; 182 | u16 mod_id; 183 | u16 mod_rev; 184 | char regs[56]; 185 | u16 nr_modes; 186 | u16 bytes_per_mode; 187 | char mode1[16]; 188 | char mode2[16]; 189 | }; 190 | 191 | struct ov9281 { 192 | struct v4l2_subdev subdev; 193 | struct media_pad pad; 194 | struct v4l2_ctrl_handler ctrl_handler; 195 | struct clk *clk; 196 | int hflip; 197 | int vflip; 198 | u16 digital_gain; 199 | u32 exposure_time; 200 | struct v4l2_ctrl *pixel_rate; 201 | const struct ov9281_mode *cur_mode; 202 | struct i2c_client *rom; 203 | struct inno_rom_table rom_table; 204 | }; 205 | 206 | static const struct ov9281_mode supported_modes[] = { 207 | { 208 | .sensor_mode = 0, 209 | .sensor_ext_trig = 0, 210 | .sensor_depth = 10, 211 | .width = 1280, 212 | .height = 800, 213 | .max_fps = 120, 214 | .hts_def = 1355, 215 | .vts_def = 805, 216 | .reg_list = ov9281_init_tab_1280_800_120fps, 217 | }, 218 | { 219 | .sensor_mode = 1, 220 | .sensor_ext_trig = 0, 221 | .sensor_depth = 8, 222 | .width = 1280, 223 | .height = 800, 224 | .max_fps = 120, 225 | .hts_def = 1355, 226 | .vts_def = 805, 227 | .reg_list = ov9281_init_tab_8_1280_800_120fps, 228 | }, 229 | { 230 | .sensor_mode = 2, 231 | .sensor_ext_trig = 1, 232 | .sensor_depth = 10, 233 | .width = 1280, 234 | .height = 800, 235 | .max_fps = 120, 236 | .hts_def = 1355, 237 | .vts_def = 805, 238 | .reg_list = ov9281_init_tab_1280_800_ext, 239 | }, 240 | { 241 | .sensor_mode = 3, 242 | .sensor_ext_trig = 1, 243 | .sensor_depth = 8, 244 | .width = 1280, 245 | .height = 800, 246 | .max_fps = 120, 247 | .hts_def = 1355, 248 | .vts_def = 805, 249 | .reg_list = ov9281_init_tab_8_1280_800_ext, 250 | }, 251 | { 252 | .sensor_mode = 4, 253 | .sensor_ext_trig = 0, 254 | .sensor_depth = 10, 255 | .width = 1280, 256 | .height = 720, 257 | .max_fps = 130, 258 | .hts_def = 1355, 259 | .vts_def = 805, 260 | .reg_list = ov9281_init_tab_1280_720_130fps, 261 | }, 262 | { 263 | .sensor_mode = 5, 264 | .sensor_ext_trig = 0, 265 | .sensor_depth = 8, 266 | .width = 1280, 267 | .height = 720, 268 | .max_fps = 130, 269 | .hts_def = 1355, 270 | .vts_def = 805, 271 | .reg_list = ov9281_init_tab_8_1280_720_130fps, 272 | }, 273 | { 274 | .sensor_mode = 6, 275 | .sensor_ext_trig = 1, 276 | .sensor_depth = 10, 277 | .width = 1280, 278 | .height = 720, 279 | .max_fps = 130, 280 | .hts_def = 1355, 281 | .vts_def = 805, 282 | .reg_list = ov9281_init_tab_1280_720_ext, 283 | }, 284 | { 285 | .sensor_mode = 7, 286 | .sensor_ext_trig = 1, 287 | .sensor_depth = 8, 288 | .width = 1280, 289 | .height = 720, 290 | .max_fps = 130, 291 | .hts_def = 1355, 292 | .vts_def = 805, 293 | .reg_list = ov9281_init_tab_8_1280_720_ext, 294 | }, 295 | { 296 | .sensor_mode = 8, 297 | .sensor_ext_trig = 0, 298 | .sensor_depth = 10, 299 | .width = 640, 300 | .height = 400, 301 | .max_fps = 210, 302 | .hts_def = 1355, 303 | .vts_def = 805, 304 | .reg_list = ov9281_init_tab_640_400_210fps, 305 | }, 306 | { 307 | .sensor_mode = 9, 308 | .sensor_ext_trig = 0, 309 | .sensor_depth = 8, 310 | .width = 640, 311 | .height = 400, 312 | .max_fps = 210, 313 | .hts_def = 1355, 314 | .vts_def = 805, 315 | .reg_list = ov9281_init_tab_8_640_400_210fps, 316 | }, 317 | { 318 | .sensor_mode = 10, 319 | .sensor_ext_trig = 1, 320 | .sensor_depth = 10, 321 | .width = 640, 322 | .height = 400, 323 | .max_fps = 210, 324 | .hts_def = 1355, 325 | .vts_def = 805, 326 | .reg_list = ov9281_init_tab_640_400_ext, 327 | }, 328 | { 329 | .sensor_mode = 11, 330 | .sensor_ext_trig = 1, 331 | .sensor_depth = 8, 332 | .width = 640, 333 | .height = 400, 334 | .max_fps = 210, 335 | .hts_def = 1355, 336 | .vts_def = 805, 337 | .reg_list = ov9281_init_tab_8_640_400_ext, 338 | }, 339 | { 340 | .sensor_mode = 12, 341 | .sensor_ext_trig = 0, 342 | .sensor_depth = 8, 343 | .width = 320, 344 | .height = 200, 345 | .max_fps = 480, 346 | .hts_def = 728, 347 | .vts_def = 288, 348 | .reg_list = ov9281_init_tab_8_320_200_480fps, 349 | }, 350 | 351 | { 352 | .sensor_mode = 13, 353 | .sensor_ext_trig = 1, 354 | .sensor_depth = 8, 355 | .width = 320, 356 | .height = 200, 357 | .max_fps = 480, 358 | .hts_def = 728, 359 | .vts_def = 288, 360 | .reg_list = ov9281_init_tab_8_320_200_480fps, 361 | }, 362 | }; 363 | 364 | static struct ov9281 *to_ov9281(const struct i2c_client *client) 365 | { 366 | return container_of(i2c_get_clientdata(client), struct ov9281, subdev); 367 | } 368 | 369 | static int reg_write(struct i2c_client *client, const u16 addr, const u8 data) 370 | { 371 | struct i2c_adapter *adap = client->adapter; 372 | struct i2c_msg msg; 373 | u8 tx[3]; 374 | int ret; 375 | 376 | msg.addr = client->addr; 377 | msg.buf = tx; 378 | msg.len = 3; 379 | msg.flags = 0; 380 | tx[0] = addr >> 8; 381 | tx[1] = addr & 0xff; 382 | tx[2] = data; 383 | ret = i2c_transfer(adap, &msg, 1); 384 | mdelay(2); 385 | 386 | return ret == 1 ? 0 : -EIO; 387 | } 388 | 389 | static int rom_write(struct i2c_client *client, const u8 addr, const u8 data) 390 | { 391 | struct i2c_adapter *adap = client->adapter; 392 | struct i2c_msg msg; 393 | u8 tx[2]; 394 | int ret; 395 | 396 | msg.addr = client->addr; 397 | msg.buf = tx; 398 | msg.len = 2; 399 | msg.flags = 0; 400 | tx[0] = addr; 401 | tx[1] = data; 402 | ret = i2c_transfer(adap, &msg, 1); 403 | mdelay(2); 404 | 405 | return ret == 1 ? 0 : -EIO; 406 | } 407 | 408 | static int reg_read(struct i2c_client *client, const u16 addr) 409 | { 410 | u8 buf[2] = {addr >> 8, addr & 0xff}; 411 | int ret; 412 | struct i2c_msg msgs[] = { 413 | { 414 | .addr = client->addr, 415 | .flags = 0, 416 | .len = 2, 417 | .buf = buf, 418 | }, { 419 | .addr = client->addr, 420 | .flags = I2C_M_RD, 421 | .len = 1, 422 | .buf = buf, 423 | }, 424 | }; 425 | 426 | ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 427 | if (ret < 0) { 428 | dev_warn(&client->dev, "Reading register %x from %x failed\n", 429 | addr, client->addr); 430 | return ret; 431 | } 432 | 433 | return buf[0]; 434 | } 435 | 436 | static int rom_read(struct i2c_client *client, const u8 addr) 437 | { 438 | u8 buf[1]={ addr }; 439 | int ret; 440 | struct i2c_msg msgs[] = { 441 | { 442 | .addr = client->addr, 443 | .flags = 0, 444 | .len = 1, 445 | .buf = buf, 446 | }, { 447 | .addr = client->addr, 448 | .flags = I2C_M_RD, 449 | .len = 1, 450 | .buf = buf, 451 | }, 452 | }; 453 | 454 | ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 455 | if (ret < 0) { 456 | dev_warn(&client->dev, "Reading register %x from %x failed\n", 457 | addr, client->addr); 458 | return ret; 459 | } 460 | 461 | return buf[0]; 462 | } 463 | 464 | static int reg_write_table(struct i2c_client *client, 465 | const struct ov9281_reg table[]) 466 | { 467 | const struct ov9281_reg *reg; 468 | int ret; 469 | 470 | for (reg = table; reg->addr != OV9281_TABLE_END; reg++) { 471 | ret = reg_write(client, reg->addr, reg->val); 472 | if (ret < 0) 473 | return ret; 474 | } 475 | 476 | return 0; 477 | } 478 | 479 | /* V4L2 subdev video operations */ 480 | static int ov9281_s_stream(struct v4l2_subdev *sd, int enable) 481 | { 482 | struct i2c_client *client = v4l2_get_subdevdata(sd); 483 | struct ov9281 *priv = to_ov9281(client); 484 | int ret; 485 | int addr; 486 | int data; 487 | 488 | if (!enable) 489 | return reg_write_table(client, stop); 490 | 491 | ret = reg_write_table(client, priv->cur_mode->reg_list); 492 | if (ret) 493 | return ret; 494 | 495 | if(priv->cur_mode->sensor_ext_trig) 496 | { 497 | addr = 208; // ext trig enable 498 | data = 1; // external trigger enable 499 | ret = rom_write(priv->rom, addr, data); 500 | 501 | mdelay(10); 502 | return reg_write_table(client, stop); 503 | } 504 | else 505 | { 506 | addr = 208; // ext trig enable 507 | data = 0; // external trigger disable 508 | ret = rom_write(priv->rom, addr, data); 509 | 510 | return reg_write_table(client, start); 511 | } 512 | } 513 | 514 | /* V4L2 subdev core operations */ 515 | static int ov9281_s_power(struct v4l2_subdev *sd, int on) 516 | { 517 | struct i2c_client *client = v4l2_get_subdevdata(sd); 518 | struct ov9281 *priv = to_ov9281(client); 519 | 520 | if (on) { 521 | dev_dbg(&client->dev, "ov9281 power on\n"); 522 | clk_prepare_enable(priv->clk); 523 | } else if (!on) { 524 | dev_dbg(&client->dev, "ov9281 power off\n"); 525 | clk_disable_unprepare(priv->clk); 526 | } 527 | 528 | return 0; 529 | } 530 | 531 | static int ov9281_s_ctrl(struct v4l2_ctrl *ctrl) 532 | { 533 | struct ov9281 *priv = 534 | container_of(ctrl->handler, struct ov9281, ctrl_handler); 535 | struct i2c_client *client = v4l2_get_subdevdata(&priv->subdev); 536 | u8 reg; 537 | int ret; 538 | u16 gain = 0; 539 | u32 exposure = 0; 540 | 541 | switch (ctrl->id) { 542 | case V4L2_CID_HFLIP: 543 | priv->hflip = ctrl->val; 544 | reg = reg_read(client, 0x3821); 545 | if(ctrl->val) 546 | ret=reg_write(client, 0x3821, reg|0x04); 547 | else 548 | ret=reg_write(client, 0x3821, reg&0xFB); 549 | return ret; 550 | case V4L2_CID_VFLIP: 551 | priv->vflip = ctrl->val; 552 | reg = reg_read(client, 0x3820); 553 | if(ctrl->val) 554 | ret=reg_write(client, 0x3820, reg|0x04); 555 | else 556 | ret=reg_write(client, 0x3820, reg&0xFB); 557 | return ret; 558 | case V4L2_CID_GAIN: 559 | 560 | gain = ctrl->val; 561 | 562 | if (gain < OV9281_DIGITAL_GAIN_MIN) 563 | gain = OV9281_DIGITAL_GAIN_MIN; 564 | if (gain > OV9281_DIGITAL_GAIN_MAX) 565 | gain = OV9281_DIGITAL_GAIN_MAX; 566 | 567 | priv->digital_gain = gain; 568 | dev_info(&client->dev, "GAIN = %d \n",gain); 569 | 570 | ret = reg_write(client, 0x3507, 0x03); 571 | ret |= reg_write(client, 0x3509, (priv->digital_gain) & 0xfe); 572 | 573 | return ret; 574 | 575 | case V4L2_CID_EXPOSURE: 576 | 577 | // 578 | // 8721 ns <==> 16 579 | // 580 | exposure = (ctrl->val / 8721) * 16; // value in ns - 4 bit shift 581 | 582 | if (exposure < OV9281_DIGITAL_EXPOSURE_MIN) 583 | exposure = OV9281_DIGITAL_EXPOSURE_MIN; 584 | if (exposure > OV9281_DIGITAL_EXPOSURE_MAX) 585 | exposure = OV9281_DIGITAL_EXPOSURE_MAX; 586 | 587 | priv->exposure_time = (exposure / 16) * 8721; 588 | 589 | dev_info(&client->dev, "EXPOSURE = %d \n",exposure); 590 | 591 | ret = reg_write(client, 0x3500, (exposure >> 16) & 0x0f); 592 | ret |= reg_write(client, 0x3501, (exposure >> 8) & 0xff); 593 | ret |= reg_write(client, 0x3502, exposure & 0xff); 594 | 595 | return ret; 596 | 597 | default: 598 | return -EINVAL; 599 | } 600 | 601 | /* If enabled, apply settings immediately */ 602 | reg = reg_read(client, 0x100); 603 | if ((reg & 0x1f) == 0x01) 604 | ov9281_s_stream(&priv->subdev, 1); 605 | 606 | return 0; 607 | } 608 | 609 | static int ov9281_enum_mbus_code(struct v4l2_subdev *sd, 610 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(5,15,0) 611 | struct v4l2_subdev_state *sd_state, 612 | #else 613 | struct v4l2_subdev_pad_config *cfg, 614 | #endif 615 | struct v4l2_subdev_mbus_code_enum *code) 616 | { 617 | struct i2c_client *client = v4l2_get_subdevdata(sd); 618 | struct ov9281 *priv = to_ov9281(client); 619 | const struct ov9281_mode *mode = priv->cur_mode; 620 | 621 | if (code->index !=0) 622 | return -EINVAL; 623 | 624 | if(mode->sensor_depth==8) 625 | code->code = MEDIA_BUS_FMT_Y8_1X8; 626 | 627 | if(mode->sensor_depth==10) 628 | code->code = MEDIA_BUS_FMT_Y10_1X10; 629 | 630 | return 0; 631 | } 632 | 633 | #if 0 634 | static int ov9281_get_reso_dist(const struct ov9281_mode *mode, 635 | struct v4l2_mbus_framefmt *framefmt) 636 | { 637 | return abs(mode->width - framefmt->width) + 638 | abs(mode->height - framefmt->height); 639 | } 640 | #endif 641 | 642 | static const struct ov9281_mode *ov9281_find_best_fit( 643 | struct v4l2_subdev_format *fmt) 644 | { 645 | #if 0 646 | struct v4l2_mbus_framefmt *framefmt = &fmt->format; 647 | int dist; 648 | int cur_best_fit = 0; 649 | int cur_best_fit_dist = -1; 650 | int i; 651 | 652 | for (i = 0; i < ARRAY_SIZE(supported_modes); i++) { 653 | dist = ov9281_get_reso_dist(&supported_modes[i], framefmt); 654 | if (cur_best_fit_dist == -1 || dist < cur_best_fit_dist) { 655 | cur_best_fit_dist = dist; 656 | cur_best_fit = i; 657 | } 658 | } 659 | 660 | return &supported_modes[cur_best_fit]; 661 | #else 662 | return &supported_modes[sensor_mode]; 663 | #endif 664 | } 665 | 666 | static int ov9281_set_fmt(struct v4l2_subdev *sd, 667 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(5,15,0) 668 | struct v4l2_subdev_state *sd_state, 669 | #else 670 | struct v4l2_subdev_pad_config *cfg, 671 | #endif 672 | struct v4l2_subdev_format *fmt) 673 | { 674 | struct i2c_client *client = v4l2_get_subdevdata(sd); 675 | struct ov9281 *priv = to_ov9281(client); 676 | const struct ov9281_mode *mode; 677 | 678 | if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) 679 | return 0; 680 | 681 | mode = ov9281_find_best_fit(fmt); 682 | if(mode->sensor_depth==8) 683 | fmt->format.code = MEDIA_BUS_FMT_Y8_1X8; 684 | if(mode->sensor_depth==10) 685 | fmt->format.code = MEDIA_BUS_FMT_Y10_1X10; 686 | fmt->format.width = mode->width; 687 | fmt->format.height = mode->height; 688 | fmt->format.field = V4L2_FIELD_NONE; 689 | priv->cur_mode = mode; 690 | 691 | return 0; 692 | } 693 | 694 | static int ov9281_get_fmt(struct v4l2_subdev *sd, 695 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(5,15,0) 696 | struct v4l2_subdev_state *sd_state, 697 | #else 698 | struct v4l2_subdev_pad_config *cfg, 699 | #endif 700 | struct v4l2_subdev_format *fmt) 701 | { 702 | struct i2c_client *client = v4l2_get_subdevdata(sd); 703 | struct ov9281 *priv = to_ov9281(client); 704 | const struct ov9281_mode *mode = priv->cur_mode; 705 | s64 pixel_rate; 706 | 707 | if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) 708 | return 0; 709 | 710 | fmt->format.width = mode->width; 711 | fmt->format.height = mode->height; 712 | if(mode->sensor_depth==8) 713 | fmt->format.code = MEDIA_BUS_FMT_Y8_1X8; 714 | if(mode->sensor_depth==10) 715 | fmt->format.code = MEDIA_BUS_FMT_Y10_1X10; 716 | fmt->format.field = V4L2_FIELD_NONE; 717 | 718 | pixel_rate = mode->vts_def * mode->hts_def * mode->max_fps; 719 | __v4l2_ctrl_modify_range(priv->pixel_rate, pixel_rate, 720 | pixel_rate, 1, pixel_rate); 721 | 722 | return 0; 723 | } 724 | 725 | /* Various V4L2 operations tables */ 726 | static struct v4l2_subdev_video_ops ov9281_subdev_video_ops = { 727 | .s_stream = ov9281_s_stream, 728 | }; 729 | 730 | static struct v4l2_subdev_core_ops ov9281_subdev_core_ops = { 731 | .s_power = ov9281_s_power, 732 | }; 733 | 734 | static const struct v4l2_subdev_pad_ops ov9281_subdev_pad_ops = { 735 | .enum_mbus_code = ov9281_enum_mbus_code, 736 | .set_fmt = ov9281_set_fmt, 737 | .get_fmt = ov9281_get_fmt, 738 | }; 739 | 740 | static struct v4l2_subdev_ops ov9281_subdev_ops = { 741 | .core = &ov9281_subdev_core_ops, 742 | .video = &ov9281_subdev_video_ops, 743 | .pad = &ov9281_subdev_pad_ops, 744 | }; 745 | 746 | static const struct v4l2_ctrl_ops ov9281_ctrl_ops = { 747 | .s_ctrl = ov9281_s_ctrl, 748 | }; 749 | 750 | static int ov9281_video_probe(struct i2c_client *client) 751 | { 752 | struct v4l2_subdev *subdev = i2c_get_clientdata(client); 753 | u16 model_id; 754 | u32 lot_id=0; 755 | u16 chip_id=0; 756 | int ret; 757 | 758 | ret = ov9281_s_power(subdev, 1); 759 | if (ret < 0) 760 | return ret; 761 | 762 | /* Check and show model, lot, and chip ID. */ 763 | ret = reg_read(client, 0x300A); 764 | if (ret < 0) { 765 | dev_err(&client->dev, "Failure to read Model ID (high byte)\n"); 766 | goto done; 767 | } 768 | model_id = ret << 8; 769 | 770 | ret = reg_read(client, 0x300B); 771 | if (ret < 0) { 772 | dev_err(&client->dev, "Failure to read Model ID (low byte)\n"); 773 | goto done; 774 | } 775 | model_id |= ret; 776 | 777 | ret = reg_read(client, 0x300C); 778 | if (ret < 0) { 779 | dev_err(&client->dev, "Failure to read Lot ID (low byte)\n"); 780 | goto done; 781 | } 782 | lot_id = ret; 783 | 784 | dev_info(&client->dev, 785 | "Model ID 0x%04x, Lot ID 0x%06x, Chip ID 0x%04x\n", 786 | model_id, lot_id, chip_id); 787 | done: 788 | ov9281_s_power(subdev, 0); 789 | return ret; 790 | } 791 | 792 | static int ov9281_ctrls_init(struct v4l2_subdev *sd) 793 | { 794 | struct i2c_client *client = v4l2_get_subdevdata(sd); 795 | struct ov9281 *priv = to_ov9281(client); 796 | const struct ov9281_mode *mode = priv->cur_mode; 797 | s64 pixel_rate; 798 | int ret; 799 | 800 | v4l2_ctrl_handler_init(&priv->ctrl_handler, 10); 801 | 802 | v4l2_ctrl_new_std(&priv->ctrl_handler, &ov9281_ctrl_ops, 803 | V4L2_CID_HFLIP,0,1,1,0); 804 | v4l2_ctrl_new_std(&priv->ctrl_handler, &ov9281_ctrl_ops, 805 | V4L2_CID_VFLIP,0,1,1,0); 806 | 807 | v4l2_ctrl_new_std(&priv->ctrl_handler, &ov9281_ctrl_ops, 808 | V4L2_CID_GAIN, 809 | OV9281_DIGITAL_GAIN_MIN, 810 | OV9281_DIGITAL_GAIN_MAX, 1, 811 | OV9281_DIGITAL_GAIN_DEFAULT); 812 | 813 | v4l2_ctrl_new_std(&priv->ctrl_handler, &ov9281_ctrl_ops, 814 | V4L2_CID_EXPOSURE, 815 | (OV9281_DIGITAL_EXPOSURE_MIN/16) * 8721, 816 | (OV9281_DIGITAL_EXPOSURE_MAX/16) * 8721, 1, 817 | (OV9281_DIGITAL_EXPOSURE_DEFAULT/16) * 8721); 818 | 819 | 820 | /* freq */ 821 | v4l2_ctrl_new_int_menu(&priv->ctrl_handler, NULL, V4L2_CID_LINK_FREQ, 822 | 0, 0, link_freq_menu_items); 823 | pixel_rate = mode->vts_def * mode->hts_def * mode->max_fps; 824 | priv->pixel_rate = v4l2_ctrl_new_std(&priv->ctrl_handler, NULL, V4L2_CID_PIXEL_RATE, 825 | 0, pixel_rate, 1, pixel_rate); 826 | 827 | 828 | priv->subdev.ctrl_handler = &priv->ctrl_handler; 829 | if (priv->ctrl_handler.error) { 830 | dev_err(&client->dev, "Error %d adding controls\n", 831 | priv->ctrl_handler.error); 832 | ret = priv->ctrl_handler.error; 833 | goto error; 834 | } 835 | 836 | ret = v4l2_ctrl_handler_setup(&priv->ctrl_handler); 837 | if (ret < 0) { 838 | dev_err(&client->dev, "Error %d setting default controls\n", 839 | ret); 840 | goto error; 841 | } 842 | 843 | return 0; 844 | error: 845 | v4l2_ctrl_handler_free(&priv->ctrl_handler); 846 | return ret; 847 | } 848 | 849 | /* Return 0 if detection is successful, -ENODEV otherwise */ 850 | static int ov9281_detect(struct i2c_client *client, struct i2c_board_info *info) 851 | { 852 | //struct i2c_adapter *adapter = client->adapter; 853 | 854 | strlcpy(info->type, "ov9281", I2C_NAME_SIZE); 855 | 856 | return 0; 857 | } 858 | 859 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(6,6,20) 860 | static int ov9281_probe(struct i2c_client *client) 861 | #else 862 | static int ov9281_probe(struct i2c_client *client, 863 | const struct i2c_device_id *did) 864 | #endif 865 | { 866 | struct ov9281 *priv; 867 | struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 868 | int ret; 869 | 870 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 871 | dev_warn(&adapter->dev, 872 | "I2C-Adapter doesn't support I2C_FUNC_SMBUS_BYTE\n"); 873 | return -EIO; 874 | } 875 | 876 | priv = devm_kzalloc(&client->dev, sizeof(struct ov9281), GFP_KERNEL); 877 | if (!priv) 878 | return -ENOMEM; 879 | 880 | 881 | priv->rom = i2c_new_dummy_device(adapter,0x10); 882 | if ( priv->rom ) 883 | { 884 | static int i=1; 885 | int addr,reg,data; 886 | dev_info(&client->dev, "InnoMaker Camera controller found!\n"); 887 | #if 1 888 | for (addr=0; addrrom_table); addr++) 889 | { 890 | reg = rom_read(priv->rom, addr); 891 | *((char *)(&(priv->rom_table))+addr)=(char)reg; 892 | dev_dbg(&client->dev, "addr=0x%04x reg=0x%02x\n",addr,reg); 893 | } 894 | 895 | dev_info(&client->dev, "[ MAGIC ] [ %s ]\n", 896 | priv->rom_table.magic); 897 | 898 | dev_info(&client->dev, "[ MANUF. ] [ %s ] [ MID=0x%04x ]\n", 899 | priv->rom_table.manuf, 900 | priv->rom_table.manuf_id); 901 | 902 | dev_info(&client->dev, "[ SENSOR ] [ %s %s ]\n", 903 | priv->rom_table.sen_manuf, 904 | priv->rom_table.sen_type); 905 | 906 | dev_info(&client->dev, "[ MODULE ] [ ID=0x%04x ] [ REV=0x%04x ]\n", 907 | priv->rom_table.mod_id, 908 | priv->rom_table.mod_rev); 909 | 910 | dev_info(&client->dev, "[ MODES ] [ NR=0x%04x ] [ BPM=0x%04x ]\n", 911 | priv->rom_table.nr_modes, 912 | priv->rom_table.bytes_per_mode); 913 | #endif 914 | addr = 200; // reset 915 | data = 2; // powerdown sensor 916 | reg = rom_write(priv->rom, addr, data); 917 | 918 | addr = 202; // mode 919 | data = sensor_mode; // default 8-bit streaming 920 | reg = rom_write(priv->rom, addr, data); 921 | 922 | //addr = 200; // reset 923 | //data = 0; // powerup sensor 924 | //reg = reg_write(priv->rom, addr, data); 925 | 926 | while(1) 927 | { 928 | mdelay(100); // wait 100ms 929 | 930 | addr = 201; // status 931 | reg = rom_read(priv->rom, addr); 932 | 933 | if(reg & 0x80) 934 | break; 935 | 936 | if(reg & 0x01) 937 | dev_err(&client->dev, "!!! ERROR !!! setting Sensor MODE=%d STATUS=0x%02x i=%d\n",sensor_mode,reg,i); 938 | 939 | if(i++ > 4) 940 | break; 941 | } 942 | 943 | dev_info(&client->dev, " Sensor MODE=%d PowerOn STATUS=0x%02x i=%d\n",sensor_mode,reg,i); 944 | 945 | } 946 | else 947 | { 948 | 949 | dev_err(&client->dev, "NOTE !!! External Camera controller not found !!!\n"); 950 | dev_info(&client->dev, "Sensor MODE=%d \n",sensor_mode); 951 | return -EIO; 952 | } 953 | 954 | 955 | /* 1280 * 800 by default */ 956 | priv->cur_mode = &supported_modes[sensor_mode]; 957 | 958 | v4l2_i2c_subdev_init(&priv->subdev, client, &ov9281_subdev_ops); 959 | ret = ov9281_ctrls_init(&priv->subdev); 960 | if (ret < 0) 961 | return ret; 962 | ret = ov9281_video_probe(client); 963 | if (ret < 0) 964 | return ret; 965 | 966 | priv->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; 967 | priv->pad.flags = MEDIA_PAD_FL_SOURCE; 968 | 969 | priv->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR; 970 | ret = media_entity_pads_init(&priv->subdev.entity, 1, &priv->pad); 971 | if (ret < 0) 972 | return ret; 973 | 974 | ret = v4l2_async_register_subdev(&priv->subdev); 975 | if (ret < 0) 976 | return ret; 977 | 978 | return ret; 979 | } 980 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(6,1,0) 981 | void ov9281_remove(struct i2c_client *client) 982 | #else 983 | static int ov9281_remove(struct i2c_client *client) 984 | #endif 985 | { 986 | struct ov9281 *priv = to_ov9281(client); 987 | 988 | if(priv->rom) 989 | i2c_unregister_device(priv->rom); 990 | v4l2_async_unregister_subdev(&priv->subdev); 991 | media_entity_cleanup(&priv->subdev.entity); 992 | v4l2_ctrl_handler_free(&priv->ctrl_handler); 993 | #if LINUX_VERSION_CODE>= KERNEL_VERSION(6,1,0) 994 | return; 995 | #else 996 | return 0; 997 | #endif 998 | } 999 | 1000 | static const struct i2c_device_id ov9281_id[] = { 1001 | {"inno_mipi_ov9281", 0}, 1002 | {} 1003 | }; 1004 | 1005 | static const struct of_device_id ov9281_of_match[] = { 1006 | { .compatible = "omnivision,inno_mipi_ov9281" }, 1007 | { /* sentinel */ }, 1008 | }; 1009 | MODULE_DEVICE_TABLE(of, ov9281_of_match); 1010 | 1011 | MODULE_DEVICE_TABLE(i2c, ov9281_id); 1012 | static struct i2c_driver ov9281_i2c_driver = { 1013 | .driver = { 1014 | .of_match_table = of_match_ptr(ov9281_of_match), 1015 | .name = "inno_mipi_ov9281", 1016 | }, 1017 | .probe = ov9281_probe, 1018 | .remove = ov9281_remove, 1019 | .id_table = ov9281_id, 1020 | .class = I2C_CLASS_HWMON, 1021 | .detect = ov9281_detect, 1022 | .address_list = normal_i2c, 1023 | }; 1024 | 1025 | module_i2c_driver(ov9281_i2c_driver); 1026 | MODULE_VERSION("0.0.3"); 1027 | MODULE_DESCRIPTION("Inno-maker - MIPI OV9281 driver for Raspberry pi"); 1028 | MODULE_AUTHOR("Jack Yang, Inno-maker "); 1029 | MODULE_LICENSE("GPL v2"); 1030 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.ko: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.ko -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.mod: -------------------------------------------------------------------------------- 1 | /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.o 2 | 3 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.mod.c: -------------------------------------------------------------------------------- 1 | #include 2 | #define INCLUDE_VERMAGIC 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | BUILD_SALT; 9 | BUILD_LTO_INFO; 10 | 11 | MODULE_INFO(vermagic, VERMAGIC_STRING); 12 | MODULE_INFO(name, KBUILD_MODNAME); 13 | 14 | __visible struct module __this_module 15 | __section(".gnu.linkonce.this_module") = { 16 | .name = KBUILD_MODNAME, 17 | .init = init_module, 18 | #ifdef CONFIG_MODULE_UNLOAD 19 | .exit = cleanup_module, 20 | #endif 21 | .arch = MODULE_ARCH_INIT, 22 | }; 23 | 24 | #ifdef CONFIG_RETPOLINE 25 | MODULE_INFO(retpoline, "Y"); 26 | #endif 27 | 28 | static const struct modversion_info ____versions[] 29 | __used __section("__versions") = { 30 | { 0x7d0b00ef, "module_layout" }, 31 | { 0xe40769c1, "param_ops_int" }, 32 | { 0x18321fdf, "i2c_del_driver" }, 33 | { 0x2b8189c2, "i2c_register_driver" }, 34 | { 0x9220962b, "v4l2_async_register_subdev" }, 35 | { 0x3d4f5f40, "media_entity_pads_init" }, 36 | { 0x11f03218, "v4l2_ctrl_handler_setup" }, 37 | { 0xdc88f81d, "_dev_err" }, 38 | { 0x33086fb2, "v4l2_ctrl_new_int_menu" }, 39 | { 0x72db2f3c, "v4l2_ctrl_new_std" }, 40 | { 0x10899116, "v4l2_ctrl_handler_init_class" }, 41 | { 0x4d58e216, "v4l2_i2c_subdev_init" }, 42 | { 0xcc656c0a, "_dev_info" }, 43 | { 0x4da8b19c, "i2c_new_dummy_device" }, 44 | { 0x4cd3ff7e, "devm_kmalloc" }, 45 | { 0x815588a6, "clk_enable" }, 46 | { 0xb077e70a, "clk_unprepare" }, 47 | { 0xb6e6d99d, "clk_disable" }, 48 | { 0x7c9a7371, "clk_prepare" }, 49 | { 0xeae3dfd6, "__const_udelay" }, 50 | { 0x8da6585d, "__stack_chk_fail" }, 51 | { 0xfe6bc7c7, "_dev_warn" }, 52 | { 0xd0b3ddca, "i2c_transfer" }, 53 | { 0xf0165808, "__v4l2_ctrl_modify_range" }, 54 | { 0xf0de61ec, "v4l2_ctrl_handler_free" }, 55 | { 0xd0d86f2c, "v4l2_async_unregister_subdev" }, 56 | { 0xe5079f75, "i2c_unregister_device" }, 57 | { 0x5792f848, "strlcpy" }, 58 | }; 59 | 60 | MODULE_INFO(depends, "v4l2-async,mc,videodev"); 61 | 62 | MODULE_ALIAS("of:N*T*Comnivision,inno_mipi_ov9281"); 63 | MODULE_ALIAS("of:N*T*Comnivision,inno_mipi_ov9281C*"); 64 | MODULE_ALIAS("i2c:inno_mipi_ov9281"); 65 | 66 | MODULE_INFO(srcversion, "985139CD214760A26CBE1E6"); 67 | -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.mod.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.mod.o -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281/inno_mipi_ov9281.o -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281_cm4_dual.dtbo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/inno_ov9281_driver_source_code/sourcecode/inno_mipi_ov9281_cm4_dual.dtbo -------------------------------------------------------------------------------- /inno_ov9281_driver_source_code/sourcecode/modules.order: -------------------------------------------------------------------------------- 1 | /media/pi/rootfs/home/pi/uvc/inno_mipi_ov9281_driver_pi_latice_linux5.15/inno_mipi_ov9281/inno_mipi_ov9281.ko 2 | -------------------------------------------------------------------------------- /raspberrypi-kernel-headers/Download_Link.txt: -------------------------------------------------------------------------------- 1 | #kernel Linux raspberrypi 6.1.19-v8+ #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT 2023 aarch64 GNU/Linux 2 | sudo wget https://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-kernel-headers_1.20230317-1_arm64.deb 3 | sudo dpkg -i raspberrypi-kernel-headers_1.20230317-1_arm64.deb -------------------------------------------------------------------------------- /raw image tools on Windows/9281-raw10.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/raw image tools on Windows/9281-raw10.raw -------------------------------------------------------------------------------- /raw image tools on Windows/9281-raw10toraw8-test.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/raw image tools on Windows/9281-raw10toraw8-test.raw -------------------------------------------------------------------------------- /raw image tools on Windows/Iview-UserManual.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/raw image tools on Windows/Iview-UserManual.docx -------------------------------------------------------------------------------- /raw image tools on Windows/imgtools.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/raw image tools on Windows/imgtools.rar -------------------------------------------------------------------------------- /tools/gpio-sysfs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/gpio-sysfs -------------------------------------------------------------------------------- /tools/i2c_read: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/i2c_read -------------------------------------------------------------------------------- /tools/i2c_write: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/i2c_write -------------------------------------------------------------------------------- /tools/raw10p2raw8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/raw10p2raw8 -------------------------------------------------------------------------------- /tools/raw16p10p2raw8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/raw16p10p2raw8 -------------------------------------------------------------------------------- /tools/tools_code/v4l2_capture_raw10.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/tools_code/v4l2_capture_raw10.c -------------------------------------------------------------------------------- /tools/tools_code/v4l2_capture_raw12.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/tools_code/v4l2_capture_raw12.c -------------------------------------------------------------------------------- /tools/tools_code/v4l2_capture_y10.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/tools_code/v4l2_capture_y10.c -------------------------------------------------------------------------------- /tools/tools_code/v4l2_capture_y12.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/tools_code/v4l2_capture_y12.c -------------------------------------------------------------------------------- /tools/tools_code/v4l2_capture_y8.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/tools_code/v4l2_capture_y8.c -------------------------------------------------------------------------------- /tools/v4l2_capture_raw10: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_raw10 -------------------------------------------------------------------------------- /tools/v4l2_capture_raw12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_raw12 -------------------------------------------------------------------------------- /tools/v4l2_capture_y10: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_y10 -------------------------------------------------------------------------------- /tools/v4l2_capture_y10-16-5.4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_y10-16-5.4 -------------------------------------------------------------------------------- /tools/v4l2_capture_y12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_y12 -------------------------------------------------------------------------------- /tools/v4l2_capture_y8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/v4l2_capture_y8 -------------------------------------------------------------------------------- /tools/vcmipidemo-pi3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/vcmipidemo-pi3 -------------------------------------------------------------------------------- /tools/vcmipidemo-pi3-arch64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/vcmipidemo-pi3-arch64 -------------------------------------------------------------------------------- /tools/vcmipidemo-pi4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/vcmipidemo-pi4 -------------------------------------------------------------------------------- /tools/vcmipidemo-pi4-arch64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/INNO-MAKER/CAM-OV9281RAW-V2/a9a736a1cc930b35b9328c0dff611dd5554d4207/tools/vcmipidemo-pi4-arch64 --------------------------------------------------------------------------------