mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			t31-t40 drivers moved to opensdk (#841)
							parent
							
								
									b975e2f1d2
								
							
						
					
					
						commit
						b583d80644
					
				|  | @ -58,6 +58,7 @@ BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||||
| # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | ||||||
| BR2_PACKAGE_UBOOT_TOOLS=y | BR2_PACKAGE_UBOOT_TOOLS=y | ||||||
|  | BR2_PACKAGE_INGENIC_OPENSDK=y | ||||||
| BR2_PACKAGE_INGENIC_OSDRV_T31=y | BR2_PACKAGE_INGENIC_OSDRV_T31=y | ||||||
| # BR2_PACKAGE_HASERL is not set | # BR2_PACKAGE_HASERL is not set | ||||||
| # BR2_PACKAGE_HISI_GPIO is not set | # BR2_PACKAGE_HISI_GPIO is not set | ||||||
|  |  | ||||||
|  | @ -58,6 +58,7 @@ BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||||
| # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | ||||||
| BR2_PACKAGE_UBOOT_TOOLS=y | BR2_PACKAGE_UBOOT_TOOLS=y | ||||||
|  | BR2_PACKAGE_INGENIC_OPENSDK=y | ||||||
| BR2_PACKAGE_INGENIC_OSDRV_T31=y | BR2_PACKAGE_INGENIC_OSDRV_T31=y | ||||||
| BR2_PACKAGE_HASERL=y | BR2_PACKAGE_HASERL=y | ||||||
| # BR2_PACKAGE_HISI_GPIO is not set | # BR2_PACKAGE_HISI_GPIO is not set | ||||||
|  |  | ||||||
|  | @ -58,6 +58,7 @@ BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||||
| # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | ||||||
| BR2_PACKAGE_UBOOT_TOOLS=y | BR2_PACKAGE_UBOOT_TOOLS=y | ||||||
|  | BR2_PACKAGE_INGENIC_OPENSDK=y | ||||||
| BR2_PACKAGE_INGENIC_OSDRV_T31=y | BR2_PACKAGE_INGENIC_OSDRV_T31=y | ||||||
| BR2_PACKAGE_HASERL=y | BR2_PACKAGE_HASERL=y | ||||||
| # BR2_PACKAGE_HISI_GPIO is not set | # BR2_PACKAGE_HISI_GPIO is not set | ||||||
|  |  | ||||||
|  | @ -58,6 +58,7 @@ BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||||
| # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | ||||||
| BR2_PACKAGE_UBOOT_TOOLS=y | BR2_PACKAGE_UBOOT_TOOLS=y | ||||||
|  | BR2_PACKAGE_INGENIC_OPENSDK=y | ||||||
| BR2_PACKAGE_INGENIC_OSDRV_T40=y | BR2_PACKAGE_INGENIC_OSDRV_T40=y | ||||||
| BR2_PACKAGE_HASERL=y | BR2_PACKAGE_HASERL=y | ||||||
| # BR2_PACKAGE_HISI_GPIO is not set | # BR2_PACKAGE_HISI_GPIO is not set | ||||||
|  |  | ||||||
|  | @ -58,6 +58,7 @@ BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||||
| # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | # BR2_PACKAGE_FDK_AAC_OPENIPC is not set | ||||||
| BR2_PACKAGE_UBOOT_TOOLS=y | BR2_PACKAGE_UBOOT_TOOLS=y | ||||||
|  | BR2_PACKAGE_INGENIC_OPENSDK=y | ||||||
| BR2_PACKAGE_INGENIC_OSDRV_T40=y | BR2_PACKAGE_INGENIC_OSDRV_T40=y | ||||||
| BR2_PACKAGE_HASERL=y | BR2_PACKAGE_HASERL=y | ||||||
| # BR2_PACKAGE_HISI_GPIO is not set | # BR2_PACKAGE_HISI_GPIO is not set | ||||||
|  |  | ||||||
|  | @ -4,17 +4,14 @@ | ||||||
| #
 | #
 | ||||||
| ################################################################################
 | ################################################################################
 | ||||||
| 
 | 
 | ||||||
|  | INGENIC_OPENSDK_VERSION = $(shell git ls-remote https://github.com/OpenIPC/openingenic master | awk '{ print $$1 }') | ||||||
|  | INGENIC_OPENSDK_SITE = $(call github,openipc,openingenic,$(INGENIC_OPENSDK_VERSION)) | ||||||
| INGENIC_OPENSDK_LICENSE = GPL-3.0 | INGENIC_OPENSDK_LICENSE = GPL-3.0 | ||||||
| INGENIC_OPENSDK_LICENSE_FILES = LICENSE | INGENIC_OPENSDK_LICENSE_FILES = LICENSE | ||||||
| 
 | 
 | ||||||
| define INGENIC_OPENSDK_EXTRACT_CMDS | INGENIC_OPENSDK_MODULE_SUBDIRS = kernel | ||||||
| 	cp $(INGENIC_OPENSDK_PKGDIR)/src/kernel/* $(@D)/ |  | ||||||
| endef |  | ||||||
| 
 |  | ||||||
| INGENIC_OPENSDK_MODULE_MAKE_OPTS = \
 | INGENIC_OPENSDK_MODULE_MAKE_OPTS = \
 | ||||||
| 	CONFIG_GPIO=m \
 | 	SOC=$(OPENIPC_MODEL) | ||||||
| 	KVER=$(LINUX_VERSION_PROBED) \
 |  | ||||||
| 	KSRC=$(LINUX_DIR) |  | ||||||
| 
 | 
 | ||||||
| $(eval $(kernel-module)) | $(eval $(kernel-module)) | ||||||
| $(eval $(generic-package)) | $(eval $(generic-package)) | ||||||
|  |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| CROSS_COMPILE ?= mips-linux-gnu- |  | ||||||
| 
 |  | ||||||
| ifeq (${ISVP_ENV_KERNEL_DIR}, ) |  | ||||||
| 	ISVP_ENV_KERNEL_DIR = ../../../kernel |  | ||||||
| endif |  | ||||||
| 
 |  | ||||||
| KDIR := ${ISVP_ENV_KERNEL_DIR} |  | ||||||
| MODULE_NAME := gpio |  | ||||||
| 
 |  | ||||||
| all: modules |  | ||||||
| 
 |  | ||||||
| .PHONY: modules clean |  | ||||||
| 
 |  | ||||||
| obj-m := $(MODULE_NAME).o |  | ||||||
| 
 |  | ||||||
| modules: |  | ||||||
| 	@$(MAKE) -C $(KDIR) M=$(shell pwd) $@ |  | ||||||
| clean: |  | ||||||
| 	@rm -rf *.o *~ .depend .*.cmd  *.mod.c .tmp_versions *.ko *.symvers modules.order |  | ||||||
| 	@rm -f gpio |  | ||||||
|  | @ -1,79 +0,0 @@ | ||||||
| #include <jz_proc.h> |  | ||||||
| #include <linux/proc_fs.h> |  | ||||||
| #include <linux/gpio.h> |  | ||||||
| #include <linux/init.h> |  | ||||||
| #include <linux/kernel.h> |  | ||||||
| #include <linux/module.h> |  | ||||||
| #include <linux/types.h> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| MODULE_LICENSE("GPL"); |  | ||||||
| MODULE_AUTHOR("OpenIPC"); |  | ||||||
| MODULE_DESCRIPTION("Ingenic GPIO Claimer"); |  | ||||||
| 
 |  | ||||||
| static struct proc_dir_entry *claim_proc; |  | ||||||
| 
 |  | ||||||
| int claim_gpio(int gpio) { |  | ||||||
|   int ret = 0; |  | ||||||
| 
 |  | ||||||
|   pr_debug("GPIO[%i] Requesting...\n", gpio); |  | ||||||
| 
 |  | ||||||
|   if (!gpio_is_valid(gpio)) { |  | ||||||
|     pr_err("GPIO[%i] is not valid\n", gpio); |  | ||||||
|     return -1; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   if (gpio_request(gpio, 0) > 0) |  | ||||||
|     return -1; |  | ||||||
| 
 |  | ||||||
|   pr_debug("GPIO[%i] Setting direction...\n", gpio); |  | ||||||
|   gpio_direction_output(gpio, 0); |  | ||||||
|   pr_debug("GPIO[%i] Exporting...\n", gpio); |  | ||||||
|   gpio_export(gpio, true); |  | ||||||
| 
 |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| ssize_t claim_proc_write(struct file *filp, const char *buf, size_t len, |  | ||||||
|                          loff_t *off) { |  | ||||||
|   int ret = 0; |  | ||||||
|   char cmd[4] = {0}; |  | ||||||
|   uint32_t addr, data, datalen; |  | ||||||
| 
 |  | ||||||
|   if (len > 4) { |  | ||||||
|     return -EFAULT; |  | ||||||
|   } |  | ||||||
|   if (copy_from_user(cmd, buf, len)) { |  | ||||||
|     return -EFAULT; |  | ||||||
|   } |  | ||||||
|   int gpio = simple_strtoul(cmd, NULL, 0); |  | ||||||
|   ret = claim_gpio(gpio); |  | ||||||
|   if (ret) { |  | ||||||
|     pr_err("GPIO[%i] Error %i \n", gpio, ret); |  | ||||||
|     return -EFAULT; |  | ||||||
|   } else { |  | ||||||
|     pr_debug("GPIO[%i] Claiming...\n", gpio); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   return len; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static const struct file_operations claim_proc_fops = { |  | ||||||
|     .owner = THIS_MODULE, |  | ||||||
|     .write = claim_proc_write, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static __init int init_claim(void) { |  | ||||||
|   claim_proc = proc_mkdir("jz/claim", 0); |  | ||||||
|   if (!claim_proc) { |  | ||||||
|     printk("err: jz_proc_mkdir failed\n"); |  | ||||||
|   } |  | ||||||
|   proc_create_data("gpio", S_IRUGO, claim_proc, &claim_proc_fops, NULL); |  | ||||||
|   printk("Ingenic GPIO claim module (c) OpenIPC.org\n"); |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static __exit void exit_claim(void) { proc_remove(claim_proc); } |  | ||||||
| 
 |  | ||||||
| module_init(init_claim); |  | ||||||
| module_exit(exit_claim); |  | ||||||
|  | @ -1,25 +0,0 @@ | ||||||
| CROSS_COMPILE ?= mips-linux-gnu- |  | ||||||
| 
 |  | ||||||
| KDIR := ${ISVP_ENV_KERNEL_DIR} |  | ||||||
| MODULE_NAME := sinfo |  | ||||||
| 
 |  | ||||||
| all: modules |  | ||||||
| 
 |  | ||||||
| .PHONY: modules clean |  | ||||||
| 
 |  | ||||||
| $(MODULE_NAME)-objs := sensor_info.o |  | ||||||
| obj-m := $(MODULE_NAME).o |  | ||||||
| 
 |  | ||||||
| modules: |  | ||||||
| 	@if test "$(KDIR)" = ""; \
 |  | ||||||
| 	then \
 |  | ||||||
| 		echo "**************************************"; \
 |  | ||||||
| 		echo "Please run env_setup.sh at top of isvp"; \
 |  | ||||||
| 		echo "**************************************"; \
 |  | ||||||
| 	fi |  | ||||||
| 	@$(MAKE) -C $(KDIR) M=$(shell pwd) $@ |  | ||||||
| sample_sinfo: |  | ||||||
| 	mips-linux-gnu-gcc sample_sinfo.c -o sample_sinfo |  | ||||||
| clean: |  | ||||||
| 	@rm -rf *.o *~ .depend .*.cmd  *.mod.c .tmp_versions *.ko *.symvers modules.order |  | ||||||
| 	@rm -f sample_sinfo |  | ||||||
|  | @ -1,5 +0,0 @@ | ||||||
| Two ways to get sensor info |  | ||||||
| 
 |  | ||||||
| 1. open /dev/sinfo; ioctl TOCTL_SINFO_GET |  | ||||||
| 
 |  | ||||||
| 2. echo 1 >/proc/jz/sinfo/info; cat /proc/jz/sinfo/info |  | ||||||
|  | @ -1,148 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * sample_sinfo.c |  | ||||||
|  * |  | ||||||
|  * two ways to get sensor info |  | ||||||
|  * |  | ||||||
|  * 1. open /dev/sinfo; ioctl TOCTL_SINFO_GET |  | ||||||
|  * |  | ||||||
|  * 2. echo 1 >/proc/jz/sinfo/info; cat /proc/jz/sinfo/info |  | ||||||
|  * |  | ||||||
|  * */ |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <errno.h> |  | ||||||
| #include <fcntl.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/ioctl.h> |  | ||||||
| 
 |  | ||||||
| #define SENSOR_INFO_IOC_MAGIC  'S' |  | ||||||
| #define IOCTL_SINFO_GET			_IO(SENSOR_INFO_IOC_MAGIC, 100) |  | ||||||
| #define IOCTL_SINFO_FLASH		_IO(SENSOR_INFO_IOC_MAGIC, 101) |  | ||||||
| 
 |  | ||||||
| #define SENSOR_TYPE_INVALID	-1 |  | ||||||
| 
 |  | ||||||
| typedef struct SENSOR_INFO_S |  | ||||||
| { |  | ||||||
| 	unsigned char *name; |  | ||||||
| } SENSOR_INFO_T; |  | ||||||
| 
 |  | ||||||
| SENSOR_INFO_T g_sinfo[] = |  | ||||||
| { |  | ||||||
| 	{"ov9712"}, |  | ||||||
| 	{"ov9732"}, |  | ||||||
| 	{"ov9750"}, |  | ||||||
| 	{"jxh42"}, |  | ||||||
| 	{"sc1035"}, |  | ||||||
| 	{"sc1135"}, |  | ||||||
| 	{"sc1045"}, |  | ||||||
| 	{"sc1145"}, |  | ||||||
| 	{"ar0130"}, |  | ||||||
| 	{"jxh61"}, |  | ||||||
| 	{"gc2083"}, |  | ||||||
| 	{"gc1024"}, |  | ||||||
| 	{"gc1064"}, |  | ||||||
| 	{"gc2023"}, |  | ||||||
| 	{"bf3115"}, |  | ||||||
| 	{"imx225"}, |  | ||||||
| 	{"ov2710"}, |  | ||||||
| 	{"imx323"}, |  | ||||||
| 	{"sc2135"}, |  | ||||||
| 	{"sp1409"}, |  | ||||||
| 	{"jxh62"}, |  | ||||||
| 	{"bg0806"}, |  | ||||||
| 	{"ov4689"}, |  | ||||||
| 	{"jxf22"}, |  | ||||||
| 	{"imx322"}, |  | ||||||
| 	{"imx307"}, |  | ||||||
| 	{"imx291"}, |  | ||||||
| 	{"ov2735"}, |  | ||||||
| 	{"sc3035"}, |  | ||||||
| 	{"ar0237"}, |  | ||||||
| 	{"sc2145"}, |  | ||||||
| 	{"jxh65"}, |  | ||||||
| 	{"sc2300"}, |  | ||||||
| 	{"ov2735b"}, |  | ||||||
| 	{"jxv01"}, |  | ||||||
| 	{"ps5230"}, |  | ||||||
| 	{"ps5250"}, |  | ||||||
| 	{"ov2718"}, |  | ||||||
| 	{"ov2732"}, |  | ||||||
| 	{"sc2235"}, |  | ||||||
| 	{"jxk02"}, |  | ||||||
| 	{"ov7740"}, |  | ||||||
| 	{"hm2140"}, |  | ||||||
| 	{"gc2033"}, |  | ||||||
| 	{"jxf28"}, |  | ||||||
| 	{"os02b10"}, |  | ||||||
| 	{"os05a10"}, |  | ||||||
| 	{"sc2232"}, |  | ||||||
| 	{"sc2232h"}, |  | ||||||
| 	{"sc2230"}, |  | ||||||
| 	{"sc4236"}, |  | ||||||
| 	{"sc1245"}, |  | ||||||
| 	{"sc1245a"}, |  | ||||||
| 	{"gc1034"}, |  | ||||||
| 	{"sc1235"}, |  | ||||||
| 	{"jxf23"}, |  | ||||||
| 	{"ps5270"}, |  | ||||||
| 	{"sp140a"}, |  | ||||||
| 	{"sc2310"}, |  | ||||||
| 	{"hm2131"}, |  | ||||||
| 	{"mis2003"}, |  | ||||||
| 	{"jxk03"}, |  | ||||||
| 	{"sc5235"}, |  | ||||||
| 	{"ov5648"}, |  | ||||||
| 	{"ps5280"}, |  | ||||||
| 	{"jxf23s"}, |  | ||||||
| 	{"gc2053"}, |  | ||||||
| 	{"sc4335"}, |  | ||||||
| 	{"ps5260"}, |  | ||||||
| 	{"os04b10"}, |  | ||||||
| 	{"jxk05"}, |  | ||||||
| 	{"jxh63"}, |  | ||||||
| 	{"sc2335"}, |  | ||||||
| 	{"jxf37"}, |  | ||||||
| 	{"gc4653"}, |  | ||||||
| 	{"c23a98"}, |  | ||||||
| 	{"sc3335"}, |  | ||||||
| 	{"sc3235"}, |  | ||||||
| 	{"sc200ai"}, |  | ||||||
| 	{"sc401ai"}, |  | ||||||
| 	{"sc500ai"}, |  | ||||||
| 	{"jxq03"}, |  | ||||||
| 	{"jxq03p"}, |  | ||||||
| 	{"sc3338"}, |  | ||||||
| 	{"imx334"}, |  | ||||||
| 	{"imx335"}, |  | ||||||
| 	{"imx415"}, |  | ||||||
| }; |  | ||||||
| int main(int argc,char **argv) |  | ||||||
| { |  | ||||||
| 	int ret  = 0; |  | ||||||
| 	int fd   = 0; |  | ||||||
| 	int data = -1; |  | ||||||
| 	/* open device file */ |  | ||||||
| 	fd = open("/dev/sinfo", O_RDWR); |  | ||||||
| 	if (-1 == fd) { |  | ||||||
| 		printf("err: open failed\n"); |  | ||||||
| 		return -1; |  | ||||||
| 	} |  | ||||||
| 	/* iotcl to get sensor info. */ |  | ||||||
| 	/* cmd is IOCTL_SINFO_GET, data note sensor type according to SENSOR_TYPE */ |  | ||||||
| 
 |  | ||||||
| 	ret = ioctl(fd,IOCTL_SINFO_GET,&data); |  | ||||||
| 	if (0 != ret) { |  | ||||||
| 		printf("err: ioctl failed\n"); |  | ||||||
| 		return ret; |  | ||||||
| 	} |  | ||||||
| 	if (SENSOR_TYPE_INVALID == data) |  | ||||||
| 		printf("##### sensor not found\n"); |  | ||||||
| 	else |  | ||||||
| 		printf("##### sensor : %s\n", g_sinfo[data].name); |  | ||||||
| 
 |  | ||||||
| 	/* close device file */ |  | ||||||
| 	close(fd); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  | @ -1,700 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * sensor_info.c |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2012 Ingenic Semiconductor Co., Ltd. |  | ||||||
|  * |  | ||||||
|  * This program is free software; you can redistribute it and/or modify |  | ||||||
|  * it under the terms of the GNU General Public License version 2 as |  | ||||||
|  * published by the Free Software Foundation. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include <linux/init.h> |  | ||||||
| #include <linux/module.h> |  | ||||||
| #include <linux/slab.h> |  | ||||||
| #include <linux/i2c.h> |  | ||||||
| #include <linux/delay.h> |  | ||||||
| #include <linux/gpio.h> |  | ||||||
| #include <linux/clk.h> |  | ||||||
| #include <linux/cdev.h> |  | ||||||
| #include <linux/fs.h> |  | ||||||
| #include <linux/unistd.h> |  | ||||||
| #include <linux/types.h> |  | ||||||
| #include <linux/ioctl.h> |  | ||||||
| #include <linux/miscdevice.h> |  | ||||||
| #include <linux/mutex.h> |  | ||||||
| #include <jz_proc.h> |  | ||||||
| 
 |  | ||||||
| #include <linux/module.h> |  | ||||||
| #include <linux/proc_fs.h> |  | ||||||
| #include <linux/seq_file.h> |  | ||||||
| 
 |  | ||||||
| #include <soc/gpio.h> |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| static unsigned i2c_adapter_nr = 1; |  | ||||||
| #else |  | ||||||
| static unsigned i2c_adapter_nr = 0; |  | ||||||
| #endif |  | ||||||
| module_param(i2c_adapter_nr, uint, 0644); |  | ||||||
| MODULE_PARM_DESC(i2c_adapter_nr, "sensor used i2c_adapter nr"); |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| static int reset_gpio = GPIO_PC(27); |  | ||||||
| #else |  | ||||||
| static int reset_gpio = GPIO_PA(18); |  | ||||||
| #endif |  | ||||||
| module_param(reset_gpio, int, S_IRUGO); |  | ||||||
| MODULE_PARM_DESC(reset_gpio, "Reset GPIO NUM"); |  | ||||||
| 
 |  | ||||||
| static int pwdn_gpio = -1; |  | ||||||
| module_param(pwdn_gpio, int, S_IRUGO); |  | ||||||
| MODULE_PARM_DESC(pwdn_gpio, "Power down GPIO NUM"); |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| static int cim1_gpio = GPIO_PC(30); |  | ||||||
| module_param(cim1_gpio, int, S_IRUGO); |  | ||||||
| MODULE_PARM_DESC(cim1_gpio, "Cim1 GPIO NUM"); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #define SENSOR_INFO_IOC_MAGIC  'S' |  | ||||||
| #define IOCTL_SINFO_GET			_IO(SENSOR_INFO_IOC_MAGIC, 100) |  | ||||||
| #define IOCTL_SINFO_FLASH		_IO(SENSOR_INFO_IOC_MAGIC, 101) |  | ||||||
| 
 |  | ||||||
| #define SENSOR_TYPE_INVALID	-1 |  | ||||||
| 
 |  | ||||||
| #define I2C_WRITE 0 |  | ||||||
| #define I2C_READ  1 |  | ||||||
| 
 |  | ||||||
| struct i2c_trans { |  | ||||||
| 	uint32_t addr; |  | ||||||
| 	uint32_t r_w; |  | ||||||
| 	uint32_t data; |  | ||||||
| 	uint32_t datalen; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| typedef struct SENSOR_INFO_S |  | ||||||
| { |  | ||||||
| 	uint8_t *name; |  | ||||||
| 	uint8_t i2c_addr; |  | ||||||
| 	uint8_t *clk_name; |  | ||||||
| 	uint32_t clk; |  | ||||||
| 
 |  | ||||||
| 	uint32_t id_value[8]; |  | ||||||
| 	uint32_t id_value_len; |  | ||||||
| 	uint32_t id_addr[8]; |  | ||||||
| 	uint32_t id_addr_len; |  | ||||||
| 	uint8_t id_cnt; |  | ||||||
| 
 |  | ||||||
| 	struct i2c_adapter *adap; |  | ||||||
| } SENSOR_INFO_T, *SENSOR_INFO_P; |  | ||||||
| 
 |  | ||||||
| SENSOR_INFO_T g_sinfo[] = |  | ||||||
| { |  | ||||||
| 	{"ov9712", 0x30,  "cgu_cim", 24000000, {0x97, 0x11}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"ov9732", 0x36,  "cgu_cim", 24000000, {0x97, 0x32}, 1, {0x300a, 0x300b}, 2, 2, NULL}, |  | ||||||
| 	{"ov9750", 0x36,  "cgu_cim", 24000000, {0x97, 0x50}, 1, {0x300b, 0x300c}, 2, 2, NULL}, |  | ||||||
| 	{"jxh42",  0x30,  "cgu_cim", 24000000, {0xa0, 0x42, 0x81}, 1, {0xa, 0xb, 0x9}, 1, 3, NULL}, |  | ||||||
| 	{"sc1035", 0x30,  "cgu_cim", 24000000, {0xf0, 0x00}, 1, {0x580b, 0x3c05}, 2, 2, NULL}, |  | ||||||
| 	{"sc1135", 0x30,  "cgu_cim", 24000000, {0x00, 0x35}, 1, {0x580b, 0x2148}, 2, 2, NULL}, |  | ||||||
| 	{"sc1045", 0x30,  "cgu_cim", 24000000, {0x10, 0x45}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc1145", 0x30,  "cgu_cim", 24000000, {0x11, 0x45}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"ar0130", 0x10,  "cgu_cim", 24000000, {0x2402}, 2, {0x3000}, 2, 1, NULL}, |  | ||||||
| 	{"jxh61",  0x30,  "cgu_cim", 24000000, {0xa0, 0x42, 0x3}, 1, {0xa, 0xb, 0x9}, 1, 3, NULL}, |  | ||||||
| 	{"gc2083", 0x37,  "cgu_cim", 24000000, {0x20, 0x83}, 1, {0x3f0, 0x3f1}, 2, 2, NULL}, |  | ||||||
| 	{"gc1024", 0x3c,  "cgu_cim", 24000000, {0x10, 0x04}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"gc1064", 0x3c,  "cgu_cim", 24000000, {0x10, 0x24}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"gc2023", 0x37,  "cgu_cim", 24000000, {0x20, 0x23}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"bf3115", 0x6e,  "cgu_cim", 24000000, {0x31, 0x16}, 1, {0xfc, 0xfd}, 1, 2, NULL}, |  | ||||||
| 	{"imx225", 0x1a,  "cgu_cim", 24000000, {0x10, 0x01}, 1, {0x3004, 0x3013}, 2, 2, NULL}, |  | ||||||
| 	{"ov2710", 0x36,  "cgu_cim", 24000000, {0x27, 0x10}, 1, {0x300a, 0x300b}, 2, 2, NULL}, |  | ||||||
| 	{"imx323", 0x1a,  "cgu_cim", 37125000, {0x50, 0x0}, 1, {0x301c, 0x301d}, 2, 2, NULL}, |  | ||||||
| 	{"sc2135", 0x30,  "cgu_cim", 24000000, {0x21, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sp1409", 0x34,  "cgu_cim", 24000000, {0x14, 0x09}, 1, {0x04, 0x05}, 1, 2, NULL}, |  | ||||||
| 	{"jxh62",  0x30,  "cgu_cim", 24000000, {0xa0, 0x62}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"bg0806", 0x32,  "cgu_cim", 24000000, {0x08, 0x06}, 1, {0x0000, 0x0001}, 2, 2, NULL}, |  | ||||||
| 	{"ov4689", 0x36,  "cgu_cim", 24000000, {0x46, 0x88}, 1, {0x300a, 0x300b}, 2, 2, NULL}, |  | ||||||
| 	{"jxf22",  0x40,  "cgu_cim", 24000000, {0x0f, 0x22}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"imx322", 0x1a,  "cgu_cim", 37125000, {0x50, 0x0}, 1, {0x301c, 0x301d}, 2, 2, NULL}, |  | ||||||
| 	{"imx307", 0x1a,  "cgu_cim", 37125000, {0xA0, 0xB2}, 1, {0x3008, 0x301e}, 2, 2, NULL}, |  | ||||||
| 	{"imx291", 0x1a,  "cgu_cim", 37125000, {0xA0, 0xB2}, 1, {0x3008, 0x301e}, 2, 2, NULL}, |  | ||||||
| 	{"ov2735", 0x3c,  "cgu_cim", 24000000, {0x27, 0x35, 0x05}, 1, {0x02, 0x03, 0x04}, 1, 3, NULL}, |  | ||||||
| 	{"sc3035", 0x30,  "cgu_cim", 24000000, {0x30, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"ar0237", 0x10,  "cgu_cim", 27000000, {0x0256}, 2, {0x3000}, 2, 1, NULL}, |  | ||||||
| 	{"sc2145", 0x30,  "cgu_cim", 24000000, {0x21, 0x45}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"jxh65",  0x30,  "cgu_cim", 24000000, {0x0a, 0x65}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"sc2300", 0x30,  "cgu_cim", 24000000, {0x23, 0x00}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"ov2735b", 0x3c,  "cgu_cim", 24000000, {0x27, 0x35, 0x6, 0x7}, 1, {0x02, 0x03, 0x04, 0x04}, 1, 4, NULL}, |  | ||||||
| 	{"jxv01",  0x21,  "cgu_cim", 27000000, {0x0e, 0x04}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"ps5230", 0x48,  "cgu_cim", 24000000, {0x52, 0x30}, 1, {0x00, 0x01}, 1, 2, NULL}, |  | ||||||
| 	{"ps5250", 0x48,  "cgu_cim", 24000000, {0x52, 0x50}, 1, {0x00, 0x01}, 1, 2, NULL}, |  | ||||||
| 	{"ov2718", 0x36,  "cgu_cim", 24000000, {0x27, 0x70}, 1, {0x300a, 0x300b}, 2, 2, NULL}, |  | ||||||
| 	{"ov2732", 0x36,  "cgu_cim", 24000000, {0x00, 0x27, 0x32}, 1, {0x300a, 0x300b, 0x300c}, 2, 3, NULL}, |  | ||||||
| 	{"sc2235", 0x30,  "cgu_cim", 24000000, {0x22, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"jxk02",  0x40,  "cgu_cim", 24000000, {0x04, 0x03}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"ov7740", 0x21,  "cgu_cim", 24000000, {0x77, 0x42}, 1, {0x0a, 0x0b}, 1, 2, NULL}, |  | ||||||
| 	{"hm2140", 0x24,  "cgu_cim", 24000000, {0x21, 0x40}, 1, {0x0000, 0x0001}, 2, 2, NULL}, |  | ||||||
| 	{"gc2033", 0x37,  "cgu_cim", 24000000, {0x20, 0x33}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"jxf28",  0x40,  "cgu_cim", 24000000, {0x0f, 0x28}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"os02b10", 0x3c,  "cgu_cim", 24000000, {0x23, 0x08}, 1, {0x02, 0x03}, 1, 2, NULL}, |  | ||||||
| 	{"os05a10", 0x36,  "cgu_cim", 24000000, {0x53, 0x05, 0x41}, 1, {0x300a, 0x300b, 0x300c}, 2, 3, NULL}, |  | ||||||
| 	{"sc2232", 0x30,  "cgu_cim", 24000000, {0x22, 0x32, 0x01}, 1, {0x3107, 0x3108, 0x3109}, 2, 3, NULL}, |  | ||||||
| 	{"sc2232h", 0x30,  "cgu_cim", 24000000, {0xcb, 0x07, 0x01}, 1, {0x3107, 0x3108, 0x3109}, 2, 3, NULL}, |  | ||||||
| 	{"sc2230", 0x30,  "cgu_cim", 24000000, {0x22, 0x32, 0x20}, 1, {0x3107, 0x3108, 0x3109}, 2, 3, NULL}, |  | ||||||
| 	{"sc4236", 0x30,  "cgu_cim", 24000000, {0x32, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc1245", 0x30,  "cgu_cim", 24000000, {0x12, 0x45, 0x03}, 1, {0x3107, 0x3108, 0x3020}, 2, 3, NULL}, |  | ||||||
| 	{"sc1245a", 0x30,  "cgu_cim", 24000000, {0x12, 0x45, 0x02}, 1, {0x3107, 0x3108, 0x3020}, 2, 3, NULL}, |  | ||||||
| 	{"gc1034", 0x21,  "cgu_cim", 24000000, {0x10, 0x34}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"sc1235", 0x30,  "cgu_cim", 24000000, {0x12, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"jxf23",  0x40,  "cgu_cim", 24000000, {0x0f, 0x23}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"ps5270", 0x48,  "cgu_cim", 24000000, {0x52, 0x70}, 1, {0x00, 0x01}, 1, 2, NULL}, |  | ||||||
| 	{"sp140a", 0x3c,  "cgu_cim", 24000000, {0x14, 0x0a}, 1, {0x02, 0x03}, 1, 2, NULL}, |  | ||||||
| 	{"sc2310", 0x30,  "cgu_cim", 24000000, {0x23, 0x11}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"hm2131", 0x24,  "cgu_cim", 24000000, {0x14, 0x0a}, 1, {0x0000, 0x0001}, 2, 2, NULL}, |  | ||||||
| 	{"mis2003", 0x30,  "cgu_cim", 24000000, {0x20, 0x03}, 1, {0x3000, 0x3001}, 2, 2, NULL}, |  | ||||||
| 	{"jxk03",  0x40,  "cgu_cim", 24000000, {0x05, 0x03}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"sc5235", 0x30,  "cgu_cim", 24000000, {0x52, 0x35}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"ov5648", 0x36,  "cgu_cim", 24000000, {0x56, 0x48}, 1, {0x300a, 0x300b}, 2, 2, NULL}, |  | ||||||
| 	{"ps5280", 0x48,  "cgu_cim", 24000000, {0x52, 0x80}, 1, {0x00, 0x01}, 1, 2, NULL}, |  | ||||||
| 	{"jxf23s", 0x40,  "cgu_cim", 24000000, {0x0f, 0x23}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"gc2053", 0x37,  "cgu_cim", 24000000, {0x20, 0x53}, 1, {0xf0, 0xf1}, 1, 2, NULL}, |  | ||||||
| 	{"sc4335", 0x30,  "cgu_cim", 27000000, {0xcd, 0x01}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"ps5260", 0x48,  "cgu_cim", 24000000, {0x52, 0x60}, 1, {0x00, 0x01}, 1, 2, NULL}, |  | ||||||
| 	{"os04b10", 0x3c,  "cgu_cim", 24000000, {0x43, 0x08, 0x01}, 1, {0x02, 0x03, 0x04}, 1, 3, NULL}, |  | ||||||
| 	{"jxk05",  0x40,  "cgu_cim", 24000000, {0x05, 0x05}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"jxh63",  0x40,  "cgu_cim", 24000000, {0x0a, 0x63}, 1, {0x0a, 0x0b}, 1, 2, NULL}, |  | ||||||
| 	{"sc2335", 0x30,  "cgu_cim", 24000000, {0xcb, 0x14}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"jxf37",  0x40,  "cgu_cim", 24000000, {0x0f, 0x37}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"gc4653", 0x29,  "cgu_cim", 24000000, {0x46, 0x53}, 1, {0x03f0, 0x03f1}, 2, 2, NULL}, |  | ||||||
| 	{"c23a98", 0x36,  "cgu_cim", 24000000, {0x23, 0x98}, 1, {0x0000, 0x0001}, 2, 2, NULL}, |  | ||||||
| 	{"sc3335", 0x30,  "cgu_cim", 24000000, {0xcc, 0x1a}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc3235", 0x30,  "cgu_cim", 24000000, {0xcc, 0x05}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc200ai", 0x30,  "cgu_cim", 24000000, {0xcb, 0x1c}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc401ai", 0x30,  "cgu_cim", 24000000, {0xcd, 0x2e}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"sc500ai", 0x30,  "cgu_cim", 24000000, {0xce, 0x1f}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"jxq03",  0x40,  "cgu_cim", 24000000, {0x05, 0x07}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"jxq03p",  0x40,  "cgu_cim", 24000000, {0x08, 0x43}, 1, {0xa, 0xb}, 1, 2, NULL}, |  | ||||||
| 	{"sc3338", 0x30,  "cgu_cim", 24000000, {0xcc, 0x41}, 1, {0x3107, 0x3108}, 2, 2, NULL}, |  | ||||||
| 	{"imx334", 0x1a,  "cgu_cim", 37125000, {0x20, 0x03}, 1, {0x302e, 0x302f}, 2, 2, NULL}, |  | ||||||
| 	{"imx335", 0x1a,  "cgu_cim", 37125000, {0x08, 0x0}, 1, {0x302e, 0x302f}, 2, 2, NULL}, |  | ||||||
| 	{"imx415", 0x1a,  "cgu_cim", 37125000, {0x28, 0x23}, 1, {0x3b00, 0x3b06}, 2, 2, NULL}, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static int8_t g_sensor_id = -1; |  | ||||||
| static struct mutex g_mutex; |  | ||||||
| 
 |  | ||||||
| int sensor_read(SENSOR_INFO_P sinfo, struct i2c_adapter *adap, uint32_t addr, uint32_t *value) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 	uint8_t buf[4] = {0}; |  | ||||||
| 	uint8_t data[4] = {0}; |  | ||||||
| 
 |  | ||||||
| 	uint8_t rlen = sinfo->id_value_len; |  | ||||||
| 	uint8_t wlen = sinfo->id_addr_len; |  | ||||||
| 	struct i2c_msg msg[2] = { |  | ||||||
| 		[0] = { |  | ||||||
| 			.addr	= sinfo->i2c_addr, |  | ||||||
| 			.flags	= 0, |  | ||||||
| 			.len	= wlen, |  | ||||||
| 			.buf	= buf, |  | ||||||
| 		}, |  | ||||||
| 		[1] = { |  | ||||||
| 			.addr	= sinfo->i2c_addr, |  | ||||||
| 			.flags	= I2C_M_RD, |  | ||||||
| 			.len	= rlen, |  | ||||||
| 			.buf	= data, |  | ||||||
| 		} |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	if (1 == wlen) { |  | ||||||
| 		buf[0] = addr&0xff; |  | ||||||
| 	} else if (2 == wlen){ |  | ||||||
| 		buf[0] = (addr>>8)&0xff; |  | ||||||
| 		buf[1] = addr&0xff; |  | ||||||
| 	} else if (3 == wlen){ |  | ||||||
| 		buf[0] = (addr>>16)&0xff; |  | ||||||
| 		buf[1] = (addr>>8)&0xff; |  | ||||||
| 		buf[2] = addr&0xff; |  | ||||||
| 	} else if (4 == wlen){ |  | ||||||
| 		buf[0] = (addr>>24)&0xff; |  | ||||||
| 		buf[1] = (addr>>16)&0xff; |  | ||||||
| 		buf[2] = (addr>>8)&0xff; |  | ||||||
| 		buf[3] = addr&0xff; |  | ||||||
| 	} else { |  | ||||||
| 		printk("error: %s,%d wlen = %d\n", __func__, __LINE__, wlen); |  | ||||||
| 	} |  | ||||||
| 	ret = i2c_transfer(adap, msg, 2); |  | ||||||
| 	if (ret > 0) ret = 0; |  | ||||||
| 	if (0 != ret) |  | ||||||
| 		printk("error: %s,%d ret = %d\n", __func__, __LINE__, ret); |  | ||||||
| 	if (1 == rlen) { |  | ||||||
| 		*value = data[0]; |  | ||||||
| 	} else if (2 == rlen){ |  | ||||||
| 		*value = (data[0]<<8)|data[1]; |  | ||||||
| 	} else if (3 == rlen){ |  | ||||||
| 		*value = (data[0]<<16)|(data[1]<<8)|data[2]; |  | ||||||
| 	} else if (4 == rlen){ |  | ||||||
| 		*value = (data[0]<<24)|(data[1]<<16)|(data[2]<<8)|data[3]; |  | ||||||
| 	} else { |  | ||||||
| 		printk("error: %s,%d rlen = %d\n", __func__, __LINE__, rlen); |  | ||||||
| 	} |  | ||||||
| 	printk(" sensor_read: addr=0x%x value = 0x%x\n", addr, *value); |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
| static int32_t process_one_adapter(struct device *dev, void *data) |  | ||||||
| { |  | ||||||
| 	int32_t ret; |  | ||||||
| 	int32_t i = 0; |  | ||||||
| 	int32_t j = 0; |  | ||||||
| 	struct clk *mclk; |  | ||||||
| 	struct i2c_adapter *adap; |  | ||||||
| 	uint8_t scnt = sizeof(g_sinfo)/sizeof(g_sinfo[0]); |  | ||||||
| 	mutex_lock(&g_mutex); |  | ||||||
| 	if (dev->type != &i2c_adapter_type) { |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	adap = to_i2c_adapter(dev); |  | ||||||
| 	printk("name : %s nr : %d\n", adap->name, adap->nr); |  | ||||||
| 
 |  | ||||||
| 	if (adap->nr != i2c_adapter_nr) { |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| 	if(cim1_gpio != -1){ |  | ||||||
| 		ret = gpio_request(cim1_gpio,"cim1"); |  | ||||||
| 		if(!ret){ |  | ||||||
| 			jzgpio_set_func((cim1_gpio / 32), GPIO_FUNC_1, 1 << (cim1_gpio % 32)); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	for (i = 0; i < scnt; i++) { |  | ||||||
| 		uint8_t idcnt = g_sinfo[i].id_cnt; |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| 		g_sinfo[i].clk_name = "div_cim1"; |  | ||||||
| #endif |  | ||||||
| 		mclk = clk_get(NULL, g_sinfo[i].clk_name); |  | ||||||
| 		if (IS_ERR(mclk)) { |  | ||||||
| 			printk("Cannot get sensor input clock cgu_cim\n"); |  | ||||||
| 			mutex_unlock(&g_mutex); |  | ||||||
| 			return PTR_ERR(mclk); |  | ||||||
| 		} |  | ||||||
| 		clk_set_rate(mclk, g_sinfo[i].clk); |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| 		clk_prepare_enable(mclk); |  | ||||||
| #else |  | ||||||
| 		clk_enable(mclk); |  | ||||||
| #endif |  | ||||||
| 		if(reset_gpio != -1){ |  | ||||||
| 			ret = gpio_request(reset_gpio,"reset"); |  | ||||||
| 			if(!ret){ |  | ||||||
| 				gpio_direction_output(reset_gpio, 1); |  | ||||||
| 				msleep(20); |  | ||||||
| 				gpio_direction_output(reset_gpio, 0); |  | ||||||
| 				if(strcmp(g_sinfo[i].name, "sp1409") == 0) |  | ||||||
| 					msleep(600); |  | ||||||
| 				else{ |  | ||||||
| 					msleep(20); |  | ||||||
| 					gpio_direction_output(reset_gpio, 1); |  | ||||||
| 					msleep(20); |  | ||||||
| 				} |  | ||||||
| 			}else{ |  | ||||||
| 				printk("gpio requrest fail %d\n",reset_gpio); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		if(pwdn_gpio != -1){ |  | ||||||
| 			ret = gpio_request(pwdn_gpio,"pwdn"); |  | ||||||
| 			if(!ret){ |  | ||||||
| 				gpio_direction_output(pwdn_gpio, 1); |  | ||||||
| 				msleep(150); |  | ||||||
| 				gpio_direction_output(pwdn_gpio, 0); |  | ||||||
| 				if(strcmp(g_sinfo[i].name, "sp1409") == 0) |  | ||||||
| 					msleep(600); |  | ||||||
| 				else |  | ||||||
| 					msleep(10); |  | ||||||
| 			}else{ |  | ||||||
| 				printk("gpio requrest fail %d\n",pwdn_gpio); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		for (j = 0; j < idcnt; j++) { |  | ||||||
| 			uint32_t value = 0; |  | ||||||
| 			ret = sensor_read(&g_sinfo[i], adap, g_sinfo[i].id_addr[j], &value); |  | ||||||
| 			if (0 != ret) { |  | ||||||
| 				printk("err sensor read addr = 0x%x, value = 0x%x\n", g_sinfo[i].id_addr[j], value); |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 			if(strcmp(g_sinfo[i].name, "ov2735b") == 0 && j == 2){ |  | ||||||
| 				if (value == g_sinfo[i].id_value[j]) |  | ||||||
| 					j++; |  | ||||||
| 			} |  | ||||||
| 			else |  | ||||||
| 				if (value != g_sinfo[i].id_value[j]) |  | ||||||
| 					break; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		if (-1 != reset_gpio) |  | ||||||
| 			gpio_free(reset_gpio); |  | ||||||
| 		if (-1 != pwdn_gpio) |  | ||||||
| 			gpio_free(pwdn_gpio); |  | ||||||
| 		clk_disable(mclk); |  | ||||||
| 		clk_put(mclk); |  | ||||||
| 		if (j == idcnt) { |  | ||||||
| 			printk("info: success sensor find : %s\n", g_sinfo[i].name); |  | ||||||
| 			g_sinfo[i].adap = adap; |  | ||||||
| 			g_sensor_id = i; |  | ||||||
| 			goto end_sensor_find; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	printk("info: failed sensor find\n"); |  | ||||||
| 	g_sensor_id = -1; |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return 0; |  | ||||||
| end_sensor_find: |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int32_t sensor_open(void) |  | ||||||
| { |  | ||||||
| 	int ret = -1; |  | ||||||
| 	struct clk *mclk; |  | ||||||
| 	if (-1 == g_sensor_id) |  | ||||||
| 		return 0; |  | ||||||
| 
 |  | ||||||
| 	mutex_lock(&g_mutex); |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| 	g_sinfo[g_sensor_id].clk_name = "div_cim1"; |  | ||||||
| #endif |  | ||||||
| 	mclk = clk_get(NULL, g_sinfo[g_sensor_id].clk_name); |  | ||||||
| 	if (IS_ERR(mclk)) { |  | ||||||
| 		printk("Cannot get sensor input clock cgu_cim\n"); |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return PTR_ERR(mclk); |  | ||||||
| 	} |  | ||||||
| 	clk_set_rate(mclk, g_sinfo[g_sensor_id].clk); |  | ||||||
| #ifdef CONFIG_SOC_T40 |  | ||||||
| 	clk_prepare_enable(mclk); |  | ||||||
| #else |  | ||||||
| 	clk_enable(mclk); |  | ||||||
| #endif |  | ||||||
| 	if(reset_gpio != -1){ |  | ||||||
| 		ret = gpio_request(reset_gpio,"reset"); |  | ||||||
| 		if(!ret){ |  | ||||||
| 			gpio_direction_output(reset_gpio, 1); |  | ||||||
| 			msleep(20); |  | ||||||
| 			gpio_direction_output(reset_gpio, 0); |  | ||||||
| 			msleep(20); |  | ||||||
| 			gpio_direction_output(reset_gpio, 1); |  | ||||||
| 			msleep(20); |  | ||||||
| 		}else{ |  | ||||||
| 			printk("gpio requrest fail %d\n",reset_gpio); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	if(pwdn_gpio != -1){ |  | ||||||
| 		ret = gpio_request(pwdn_gpio,"pwdn"); |  | ||||||
| 		if(!ret){ |  | ||||||
| 			gpio_direction_output(pwdn_gpio, 1); |  | ||||||
| 			msleep(150); |  | ||||||
| 			gpio_direction_output(pwdn_gpio, 0); |  | ||||||
| 			msleep(10); |  | ||||||
| 		}else{ |  | ||||||
| 			printk("gpio requrest fail %d\n",pwdn_gpio); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int32_t sensor_release(void) |  | ||||||
| { |  | ||||||
| 	struct clk *mclk; |  | ||||||
| 	if (-1 == g_sensor_id) |  | ||||||
| 		return 0; |  | ||||||
| 	mutex_lock(&g_mutex); |  | ||||||
| 	mclk = clk_get(NULL, g_sinfo[g_sensor_id].clk_name); |  | ||||||
| 	if (IS_ERR(mclk)) { |  | ||||||
| 		printk("Cannot get sensor input clock cgu_cim\n"); |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return PTR_ERR(mclk); |  | ||||||
| 	} |  | ||||||
| 	if (-1 != reset_gpio) |  | ||||||
| 		gpio_free(reset_gpio); |  | ||||||
| 	if (-1 != pwdn_gpio) |  | ||||||
| 		gpio_free(pwdn_gpio); |  | ||||||
| 	clk_disable(mclk); |  | ||||||
| 	clk_put(mclk); |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int32_t i2c_read_write(struct device *dev, void *data) |  | ||||||
| { |  | ||||||
| 	int32_t ret; |  | ||||||
| 	struct i2c_adapter *adap; |  | ||||||
| 	struct i2c_trans *t = data; |  | ||||||
| 
 |  | ||||||
| 	uint8_t buf[4] = {0}; |  | ||||||
| 	uint32_t value = 0; |  | ||||||
| 	uint8_t len = t->datalen; |  | ||||||
| 	struct i2c_msg msg = { |  | ||||||
| 			.addr	= t->addr, |  | ||||||
| 			.flags	= (t->r_w == I2C_WRITE)?0:I2C_M_RD, |  | ||||||
| 			.len	= len, |  | ||||||
| 			.buf	= buf, |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	mutex_lock(&g_mutex); |  | ||||||
| 	if (dev->type != &i2c_adapter_type) { |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	adap = to_i2c_adapter(dev); |  | ||||||
| 	printk("name : %s nr : %d\n", adap->name, adap->nr); |  | ||||||
| 
 |  | ||||||
| 	if (adap->nr != i2c_adapter_nr) { |  | ||||||
| 		mutex_unlock(&g_mutex); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if (I2C_WRITE == t->r_w) { |  | ||||||
| 		if (1 == len) { |  | ||||||
| 			buf[0] = (t->data)&0xff; |  | ||||||
| 		} else if (2 == len){ |  | ||||||
| 			buf[0] = ((t->data)>>8)&0xff; |  | ||||||
| 			buf[1] = (t->data)&0xff; |  | ||||||
| 		} else if (3 == len){ |  | ||||||
| 			buf[0] = ((t->data)>>16)&0xff; |  | ||||||
| 			buf[1] = ((t->data)>>8)&0xff; |  | ||||||
| 			buf[2] = (t->data)&0xff; |  | ||||||
| 		} else if (4 == len){ |  | ||||||
| 			buf[0] = ((t->data)>>24)&0xff; |  | ||||||
| 			buf[1] = ((t->data)>>16)&0xff; |  | ||||||
| 			buf[2] = ((t->data)>>8)&0xff; |  | ||||||
| 			buf[3] = (t->data)&0xff; |  | ||||||
| 		} else { |  | ||||||
| 			printk("error: %s,%d len = %d\n", __func__, __LINE__, len); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	ret = i2c_transfer(adap, &msg, 1); |  | ||||||
| 	if (ret > 0) ret = 0; |  | ||||||
| 	if (0 != ret) |  | ||||||
| 		printk("error: %s,%d ret = %d\n", __func__, __LINE__, ret); |  | ||||||
| 
 |  | ||||||
| 	if (I2C_READ == t->r_w) { |  | ||||||
| 		if (1 == len) { |  | ||||||
| 			value = buf[0]; |  | ||||||
| 		} else if (2 == len){ |  | ||||||
| 			value = (buf[0]<<8)|buf[1]; |  | ||||||
| 		} else if (3 == len){ |  | ||||||
| 			value = (buf[0]<<16)|(buf[1]<<8)|buf[2]; |  | ||||||
| 		} else if (4 == len){ |  | ||||||
| 			value = (buf[0]<<24)|(buf[1]<<16)|(buf[2]<<8)|buf[3]; |  | ||||||
| 		} else { |  | ||||||
| 			printk("error: %s,%d len = %d\n", __func__, __LINE__, len); |  | ||||||
| 		} |  | ||||||
| 		printk(" i2c: addr=0x%x value = 0x%x\n", t->addr, value); |  | ||||||
| 	} |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| static long sinfo_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |  | ||||||
| { |  | ||||||
| 	int ret = 0; |  | ||||||
| 	int32_t data; |  | ||||||
| 
 |  | ||||||
| 	mutex_lock(&g_mutex); |  | ||||||
| 	switch (cmd) { |  | ||||||
| 	case IOCTL_SINFO_GET: |  | ||||||
| 		if (-1 == g_sensor_id) |  | ||||||
| 			data = -1; |  | ||||||
| 		else |  | ||||||
| 			data = g_sensor_id; |  | ||||||
| 		if (copy_to_user((void *)arg, &data, sizeof(data))) { |  | ||||||
| 			printk("copy_from_user error!!!\n"); |  | ||||||
| 			ret = -EFAULT; |  | ||||||
| 			break; |  | ||||||
| 		} |  | ||||||
| 		break; |  | ||||||
| 	case IOCTL_SINFO_FLASH: |  | ||||||
| 		i2c_for_each_dev(NULL, process_one_adapter); |  | ||||||
| 		break; |  | ||||||
| 	default: |  | ||||||
| 		printk("invalid command: 0x%08x\n", cmd); |  | ||||||
| 		ret = -EINVAL; |  | ||||||
| 	} |  | ||||||
| 	mutex_unlock(&g_mutex); |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
| static int sinfo_open(struct inode *inode, struct file *filp) |  | ||||||
| { |  | ||||||
| 	i2c_for_each_dev(NULL, process_one_adapter); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| static int sinfo_release(struct inode *inode, struct file *filp) |  | ||||||
| { |  | ||||||
| 	printk ("misc sinfo_release\n"); |  | ||||||
| 	sensor_release(); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static ssize_t sinfo_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) |  | ||||||
| { |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static struct file_operations sinfo_fops = |  | ||||||
| { |  | ||||||
| 	.owner = THIS_MODULE, |  | ||||||
| 	.read = sinfo_read, |  | ||||||
| 	.unlocked_ioctl = sinfo_ioctl, |  | ||||||
| 	.open = sinfo_open, |  | ||||||
| 	.release = sinfo_release, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| static struct miscdevice misc_sinfo = { |  | ||||||
| 	.minor = MISC_DYNAMIC_MINOR, |  | ||||||
| 	.name = "sinfo", |  | ||||||
| 	.fops = &sinfo_fops, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| static int sinfo_proc_show(struct seq_file *m, void *v) |  | ||||||
| { |  | ||||||
| 	if (-1 == g_sensor_id) |  | ||||||
| 		seq_printf(m, "sensor not found\n"); |  | ||||||
| 	else |  | ||||||
| 		seq_printf(m, "sensor :%s\n", g_sinfo[g_sensor_id].name); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static int sinfo_proc_open(struct inode *inode, struct file *file) |  | ||||||
| { |  | ||||||
| 	return single_open(file, sinfo_proc_show, NULL); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| ssize_t sinfo_proc_write(struct file *filp, const char *buf, size_t len, loff_t *off) |  | ||||||
| { |  | ||||||
| 	int ret = 0; |  | ||||||
| 	char cmd[100] = {0}; |  | ||||||
| 	uint32_t addr,data,datalen; |  | ||||||
| 
 |  | ||||||
| 	if (len > 100) { |  | ||||||
| 		printk("err: cmd too long\n"); |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 	if(copy_from_user(cmd, buf, len)) |  | ||||||
| 	{ |  | ||||||
| 		return -EFAULT; |  | ||||||
| 	} |  | ||||||
| 	/* probe sensor */ |  | ||||||
| 	if (!strncmp(cmd, "1", strlen("1"))) { |  | ||||||
| 		i2c_for_each_dev(NULL, process_one_adapter); |  | ||||||
| 	/* probe sensor */ |  | ||||||
| 	} else if (!strncmp(cmd, "probe", strlen("probe"))) { |  | ||||||
| 		i2c_for_each_dev(NULL, process_one_adapter); |  | ||||||
| 	/* sensor open/release i2c read/write
 |  | ||||||
| 	 * open: set sensor clk,reset |  | ||||||
| 	 * release: free clk,reset gpio |  | ||||||
| 	 * |  | ||||||
| 	 * example: sc2135 |  | ||||||
| 	 * |  | ||||||
| 	 * echo open:sc2135 > /proc/jz/sinfo/info |  | ||||||
| 	 * echo i2c-w:0x30-0x3017-2 > /proc/jz/sinfo/info |  | ||||||
| 	 * echo i2c-r:0x30-1 > /proc/jz/sinfo/info |  | ||||||
| 	 * |  | ||||||
| 	 * */ |  | ||||||
| 	} else if (!strncmp(cmd, "i2c-w:", strlen("i2c-w:"))) { |  | ||||||
| 		ret = sscanf(cmd, "i2c-w:%i-%i-%i", &addr, &data, &datalen); |  | ||||||
| 		if (3 != ret) { |  | ||||||
| 			printk("err: cmd error %s\n", cmd); |  | ||||||
| 			return len; |  | ||||||
| 		} else { |  | ||||||
| 			struct i2c_trans t = {addr, I2C_WRITE, data, datalen}; |  | ||||||
| 			printk("info: i2c-w:%d-%d-%d\n", addr, data, datalen); |  | ||||||
| 			i2c_for_each_dev(&t, i2c_read_write); |  | ||||||
| 		} |  | ||||||
| 	} else if (!strncmp(cmd, "i2c-r:", strlen("i2c-r:"))) { |  | ||||||
| 		ret = sscanf(cmd, "i2c-r:%i-%i", &addr, &datalen); |  | ||||||
| 		if (2 != ret) { |  | ||||||
| 			printk("err: cmd error %s\n", cmd); |  | ||||||
| 			return len; |  | ||||||
| 		} else { |  | ||||||
| 			struct i2c_trans t = {addr, I2C_READ, 0, datalen}; |  | ||||||
| 			printk("info: i2c-r:%d-%d\n", addr, datalen); |  | ||||||
| 			i2c_for_each_dev(&t, i2c_read_write); |  | ||||||
| 		} |  | ||||||
| 	} else if (!strncmp(cmd, "open", strlen("open"))) { |  | ||||||
| 		int i = 0; |  | ||||||
| 		char s[20] = {0}; |  | ||||||
| 		ret = sscanf(cmd, "open:%s", s); |  | ||||||
| 		if (1 != ret) { |  | ||||||
| 			printk("err: cmd error %s\n", cmd); |  | ||||||
| 			return len; |  | ||||||
| 		} else { |  | ||||||
| 			uint8_t scnt = sizeof(g_sinfo)/sizeof(g_sinfo[0]); |  | ||||||
| 			for (i = 0; i < scnt; i++) { |  | ||||||
| 				if (!strcmp(s, g_sinfo[i].name)) { |  | ||||||
| 					g_sensor_id = i; |  | ||||||
| 					break; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			if (i >= scnt) { |  | ||||||
| 				printk("err: sensor not found %s, cmd %s\n", s, cmd); |  | ||||||
| 				return len; |  | ||||||
| 			} |  | ||||||
| 			sensor_open(); |  | ||||||
| 		} |  | ||||||
| 	} else if (!strncmp(cmd, "release", strlen("release"))) { |  | ||||||
| 		sensor_release(); |  | ||||||
| 	} else { |  | ||||||
| 		printk("err: cmd not support\n"); |  | ||||||
| 	} |  | ||||||
| 	return len; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static const struct file_operations sinfo_proc_fops = { |  | ||||||
| 	.owner = THIS_MODULE, |  | ||||||
| 	.open = sinfo_proc_open, |  | ||||||
| 	.read = seq_read, |  | ||||||
| 	.write = sinfo_proc_write, |  | ||||||
| 	.llseek = seq_lseek, |  | ||||||
| 	.release = single_release, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| struct proc_dir_entry *g_sinfo_proc; |  | ||||||
| static __init int init_sinfo(void) |  | ||||||
| { |  | ||||||
| 	int ret = 0; |  | ||||||
| 	mutex_init(&g_mutex); |  | ||||||
| #ifdef CONFIG_SOC_T21 |  | ||||||
| 	*(volatile unsigned int*)(0xB0010104) = 0x1; |  | ||||||
| #endif |  | ||||||
| 	g_sinfo_proc = proc_mkdir("jz/sinfo", 0); |  | ||||||
| 	if (!g_sinfo_proc) { |  | ||||||
| 		printk("err: jz_proc_mkdir failed\n"); |  | ||||||
| 	} |  | ||||||
| 	proc_create_data("info", S_IRUGO, g_sinfo_proc, &sinfo_proc_fops, NULL); |  | ||||||
| 	/* i2c_for_each_dev(NULL, process_one_adapter); */ |  | ||||||
| 	ret = misc_register(&misc_sinfo); |  | ||||||
| 	/* printk("##### g_sensor_id = %d\n", g_sensor_id); */ |  | ||||||
| 	return ret; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static __exit void exit_sinfo(void) |  | ||||||
| { |  | ||||||
| 	proc_remove(g_sinfo_proc); |  | ||||||
| 	misc_deregister(&misc_sinfo); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| module_init(init_sinfo); |  | ||||||
| module_exit(exit_sinfo); |  | ||||||
| 
 |  | ||||||
| MODULE_DESCRIPTION("A Simple driver for get sensors info "); |  | ||||||
| MODULE_LICENSE("GPL"); |  | ||||||
|  | @ -55,7 +55,7 @@ sync_sensor_param() { | ||||||
| 
 | 
 | ||||||
| lsmod | grep "sinfo" >/dev/null | lsmod | grep "sinfo" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/sinfo.ko | 	modprobe sinfo | ||||||
| 	check_return "insmod sinfo" | 	check_return "insmod sinfo" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | @ -162,31 +162,31 @@ echo -------------------- | ||||||
| 
 | 
 | ||||||
| lsmod | grep "avpu" >/dev/null | lsmod | grep "avpu" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/avpu.ko ${AVPU_PARAM} | 	modprobe avpu ${AVPU_PARAM} | ||||||
| 	check_return "insmod avpu" | 	check_return "insmod avpu" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "tx_isp" >/dev/null | lsmod | grep "tx_isp" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/tx-isp-${SOC}.ko ${ISP_PARAM} | 	modprobe tx-isp-${SOC} ${ISP_PARAM} | ||||||
| 	check_return "insmod isp drv" | 	check_return "insmod isp drv" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep ${SENSOR} >/dev/null | lsmod | grep ${SENSOR} >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/sensor_${SENSOR}_${SOC}.ko ${SENSOR_PARAM} ${SENSOR_EXT_PARAM} | 	modprobe sensor_${SENSOR}_${SOC} ${SENSOR_PARAM} ${SENSOR_EXT_PARAM} | ||||||
| 	check_return "insmod sensor drv" | 	check_return "insmod sensor drv" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "audio" >/dev/null | lsmod | grep "audio" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/audio.ko | 	modprobe audio | ||||||
| 	check_return "insmod audio" | 	check_return "insmod audio" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "gpio" >/dev/null | lsmod | grep "gpio" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/gpio.ko | 	modprobe gpio | ||||||
| 	check_return "insmod gpio" | 	check_return "insmod gpio" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -31,35 +31,8 @@ define INGENIC_OSDRV_T31_INSTALL_TARGET_CMDS | ||||||
| 	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic | 	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic | ||||||
| 	# $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/*.ko | 	# $(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/*.ko | ||||||
| 
 | 
 | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/audio.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/avpu.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/gpio.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sinfo.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/tx-isp-t31.ko |  | ||||||
| 
 |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_gc2053_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_gc2083_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_gc4653_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_imx307_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_jxf37_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_jxh62_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_jxq03_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_jxq03p_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_sc200ai_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_sc2232h_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_sc2335_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_sc3338_t31.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/3.10.14__isvp_swan_1.0__/ingenic $(INGENIC_OSDRV_T31_PKGDIR)/files/kmod/sensor_sc5235_t31.ko |  | ||||||
| 
 |  | ||||||
| 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin | 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin | ||||||
| 	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(INGENIC_OSDRV_T31_PKGDIR)/files/script/load* | 	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(INGENIC_OSDRV_T31_PKGDIR)/files/script/load* | ||||||
| 	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(INGENIC_OSDRV_T31_PKGDIR)/files/script/ircut_demo |  | ||||||
| 
 |  | ||||||
| 	# $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib/sensors/params |  | ||||||
| 	# $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/sensors/params $(INGENIC_OSDRV_T31_PKGDIR)/files/sensor/params/*.bin |  | ||||||
| 
 |  | ||||||
| 	# $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib/sensors/params/WDR |  | ||||||
| 	# $(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/sensors/params/WDR $(INGENIC_OSDRV_T31_PKGDIR)/files/sensor/params/WDR/*.bin |  | ||||||
| 
 | 
 | ||||||
| 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib | 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/lib | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(INGENIC_OSDRV_T31_PKGDIR)/files/lib/*.so | 	$(INSTALL) -m 644 -t $(TARGET_DIR)/usr/lib/ $(INGENIC_OSDRV_T31_PKGDIR)/files/lib/*.so | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ check_return() { | ||||||
| 
 | 
 | ||||||
| lsmod | grep "sinfo" >/dev/null | lsmod | grep "sinfo" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/sinfo.ko | 	modprobe sinfo | ||||||
| 	check_return "insmod sinfo" | 	check_return "insmod sinfo" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | @ -79,31 +79,31 @@ echo -------------------- | ||||||
| 
 | 
 | ||||||
| lsmod | grep "avpu" >/dev/null | lsmod | grep "avpu" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/avpu.ko ${AVPU_PARAM} | 	modprobe avpu ${AVPU_PARAM} | ||||||
| 	check_return "insmod avpu" | 	check_return "insmod avpu" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "tx_isp" >/dev/null | lsmod | grep "tx_isp" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/tx-isp-${SOC}.ko ${ISP_PARAM} | 	modprobe tx-isp-${SOC} ${ISP_PARAM} | ||||||
| 	check_return "insmod isp drv" | 	check_return "insmod isp drv" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep ${SENSOR} >/dev/null | lsmod | grep ${SENSOR} >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/sensor_${SENSOR}_${SOC}.ko ${SENSOR_PARAM} | 	modprobe sensor_${SENSOR}_${SOC} ${SENSOR_PARAM} | ||||||
| 	check_return "insmod sensor drv" | 	check_return "insmod sensor drv" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "audio" >/dev/null | lsmod | grep "audio" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/audio.ko | 	modprobe audio | ||||||
| 	check_return "insmod audio" | 	check_return "insmod audio" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| lsmod | grep "gpio" >/dev/null | lsmod | grep "gpio" >/dev/null | ||||||
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | ||||||
| 	insmod ${KMOD_PATH/%\//}/gpio.ko | 	modprobe gpio | ||||||
| 	check_return "insmod gpio" | 	check_return "insmod gpio" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,24 +24,9 @@ define INGENIC_OSDRV_T40_INSTALL_TARGET_CMDS | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/etc/sensor $(INGENIC_OSDRV_T40_PKGDIR)/files/sensor/params/sc830ai-t40.bin | 	$(INSTALL) -m 644 -t $(TARGET_DIR)/etc/sensor $(INGENIC_OSDRV_T40_PKGDIR)/files/sensor/params/sc830ai-t40.bin | ||||||
| 
 | 
 | ||||||
| 	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/modules/4.4.94/ingenic | 	$(INSTALL) -m 755 -d $(TARGET_DIR)/lib/modules/4.4.94/ingenic | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/audio.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/avpu.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/dtrng_dev.ko | 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/dtrng_dev.ko | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/gpio.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/mpsys.ko | 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/mpsys.ko | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sinfo.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/soc-nna.ko | 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/soc-nna.ko | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/tx-isp-t40.ko |  | ||||||
| 
 |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_gc4653_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_imx307_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_imx335_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_imx415_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_jxk04_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_sc2232h_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_sc500ai_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_sc3335_t40.ko |  | ||||||
| 	$(INSTALL) -m 644 -t $(TARGET_DIR)/lib/modules/4.4.94/ingenic $(INGENIC_OSDRV_T40_PKGDIR)/files/kmod/sensor_sc5235_t40.ko |  | ||||||
| 
 | 
 | ||||||
| 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin | 	$(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin | ||||||
| 	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(INGENIC_OSDRV_T40_PKGDIR)/files/script/load* | 	$(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(INGENIC_OSDRV_T40_PKGDIR)/files/script/load* | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue