Loading src/drivers/elphel/imu_log393.c +21 −10 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ #define IMUCR__IMU_SLOT__BITNM 0 ///< slot, where 103695 (imu) board is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__IMU_SLOT__WIDTH 2 #define IMUCR__GPS_CONF__BITNM 3 ///< slot, where 103695 (imu) bnoard is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__GPS_CONF__BITNM 3 ///< slot, where 103695 (imu) board is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__GPS_CONF__WIDTH 4 ///< bits 0,1 - slot #, same as for IMU_SLOT, bits 2,3: // 0 - ext pulse, leading edge, // 1 - ext pulse, trailing edge Loading Loading @@ -342,7 +342,7 @@ static struct file_operations imu_fops = { }; static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first, 4 - set divisor, 8 set regs, 16 - set period // IMU should be enable through i2c before opening // IMU should be enabled through i2c before opening int i,j,b,f,n; int nmea_sel[16]; int nmea_fpga_frmt[16]; Loading @@ -357,10 +357,12 @@ static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first x393_logger_address_t logger_address; x393_logger_data_t logger_data; x393_gpio_set_pins_t gpio_set_pins; // D(int i2c_err=0;) int i2c_err=0; dev_info(g_dev_ptr,"============ which = 0x%x =============== \n",which); dev_dbg(g_dev_ptr,"============ which = 0x%x =============== \n",which); D(for (i=0; i< sizeof (wbuf); i++ ) { if ((i & 0x1f)==0) printk("\n %03x",i); printk(" %02x",(int) wbuf[i]); }); if (which & WHICH_RESET) { if (logger_is_dma_on()!=0) { Loading @@ -386,6 +388,7 @@ static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first dev_dbg(g_dev_ptr,"Enabling I/O pins for IMU, written 0x%x to 0x%x\n", (int) X313_WA_IOPINS_EN_IMU, (int) X313_WA_IOPINS); port_csp0_addr[X313_WA_IOPINS] = X313_WA_IOPINS_EN_IMU; #else dev_info(g_dev_ptr,"Enabling I/O pins for IMU\n"); dev_dbg(g_dev_ptr,"Enabling I/O pins for IMU\n"); gpio_set_pins.d32 = 0; gpio_set_pins.chn_c = 3; // enable Loading Loading @@ -628,6 +631,7 @@ static int imu_open(struct inode *inode, struct file *filp) { if (logger_is_dma_on()==0) { /// copy defaults dev_dbg(g_dev_ptr,"Initializing IMU\n"); dev_info(g_dev_ptr,"imu_open(): Initializing IMU\n"); for (i=0;i<sizeof(wbuf);i++) wbuf[i]=dflt_wbuf[i]; set_logger_params(WHICH_INIT | WHICH_RESET | Loading Loading @@ -708,15 +712,20 @@ static ssize_t imu_write(struct file * file, const char * buf, size_t count, lof if (left==0) return 0; if (copy_from_user(&wbuf[p], buf, count)) return -EFAULT; if (p<(X313_IMU_PERIOD_OFFS+4)) which |= WHICH_PERIOD; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_DIVISOR_OFFS+4)) && ((p+count)>X313_IMU_DIVISOR_OFFS)) which |= WHICH_DIVISOR; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_RS232DIV_OFFS+4)) && ((p+count)>X313_IMU_RS232DIV_OFFS)) which |= WHICH_RS232DIV; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); // if ((p<(X313_IMU_CONFIGURE_OFFS+4)) && ((p+count)>X313_IMU_CONFIGURE_OFFS)) which |= WHICH_CONFIG; if ((p<(X313_IMU_CONFIGURE_OFFS+4)) && ((p+count)>X313_IMU_CONFIGURE_OFFS)) which |= WHICH_CONFIG | WHICH_INIT; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_NMEA_FORMAT_OFFS)) && ((p+count)>X313_IMU_REGISTERS_OFFS)) which |= WHICH_REGISTERS; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_MESSAGE_OFFS)) && ((p+count)>X313_IMU_NMEA_FORMAT_OFFS)) which |= WHICH_NMEA; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p+count)>X313_IMU_MESSAGE_OFFS) which |= WHICH_MESSAGE; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); // will not add automatic restarts here set_logger_params(which); // if (which & WHICH_PERIOD) num_reads=0; Loading Loading @@ -880,7 +889,7 @@ static ssize_t imu_read(struct file * file, char * buf, size_t count, loff_t *of err=copy_to_user(buf, &charDMABuf[byteIndexRead], (pe-byteIndexRead)); if (err) { dev_err(g_dev_ptr,"1. tried to copy 0x%x bytes to offset 0x%llx, result=0x%x\n", count, *off,err); //[ 811.889488] imu_logger elphel393-logger@0: 1. tried to copy 0x1000 bytes to offset 0x0, result=0x400000 return -EFAULT; } // advance pointers Loading Loading @@ -944,10 +953,10 @@ static int logger_init(struct platform_device *pdev) unsigned int irq; int res; struct device *dev = &pdev->dev; g_dev_ptr = dev; const struct of_device_id *match; const char *logger_irq_names[4] = {"mult_saxi_0", "mult_saxi_1", "mult_saxi_2", "mult_saxi_3"}; g_dev_ptr = dev; /* sanity check */ match = of_match_device(elphel393_logger_of_match, dev); Loading Loading @@ -1138,6 +1147,8 @@ void logger_dma_start(void) { #else logger_dma_ctrl(LOGGER_DMA_RUN); #endif dev_dbg(g_dev_ptr,"----------logger_dma_start\n"); dev_info(g_dev_ptr,"----------logger_dma_start\n"); dma_is_on=1; } Loading @@ -1146,9 +1157,8 @@ void logger_dma_start(void) { ///dma0 is using external dma 3 (input) with dma channel 9 ///dma1 (this) is using external dma 1 (input) with dma channel 7 (shared with async. serial 0, so do not use DMA there!) unsigned long x313_dma1_init(void) { int rslt; dma_is_on=0; #ifdef NC353 int rslt; reg_dma_rw_cfg cfg = {.en = regk_dma_yes}; // if disabled - will be busy and hang on attemt of DMA_WR_CMD reg_bif_dma_rw_ch1_ctrl exdma_ctrl = { .bw = regk_bif_dma_bw32, Loading Loading @@ -1207,6 +1217,7 @@ unsigned long x313_dma1_init(void) { x313_setDMA1Buffer(); return ((unsigned long)virt_to_phys(logger_buffer)) | 0x80000000; #endif dma_is_on=0; return 0; } Loading src/drivers/elphel/pgm_functions.c +7 −4 Original line number Diff line number Diff line Loading @@ -405,8 +405,10 @@ int pgm_detectsensor (int sensor_port, ///< sensor port number ( legacy_i2c(1<<sensor_port);// Setup i2c pages for legacy i2c commands. TODO NC393: update for compatibility with 14MPix camsync_mode.trig = 0; camsync_mode.trig_set = 1; camsync_mode.ext = 1; // use external timestamp (default) camsync_mode.ext_set = 1; // This causes mismatch with parameters, let it be there // camsync_mode.ext = 1; // use external timestamp (default) // camsync_mode.ext_set = 1; x393_camsync_mode (camsync_mode); // dev_dbg(g_dev_ptr,"trying MT9P001\n"); Loading Loading @@ -731,8 +733,9 @@ typedef union { camsync_mode.en = 1; camsync_mode.en_set = 1; camsync_mode.ext = 1; // 0; camsync_mode.ext_set = 1; // Causes mismatch with parameters, let it be there // camsync_mode.ext = 1; // 0; // camsync_mode.ext_set = 1; camsync_mode.trig = 0; camsync_mode.trig_set = 1; Loading Loading
src/drivers/elphel/imu_log393.c +21 −10 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ #define IMUCR__IMU_SLOT__BITNM 0 ///< slot, where 103695 (imu) board is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__IMU_SLOT__WIDTH 2 #define IMUCR__GPS_CONF__BITNM 3 ///< slot, where 103695 (imu) bnoard is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__GPS_CONF__BITNM 3 ///< slot, where 103695 (imu) board is connected: 0 - none, 1 - J9, 2 - J10, 3 - J11) #define IMUCR__GPS_CONF__WIDTH 4 ///< bits 0,1 - slot #, same as for IMU_SLOT, bits 2,3: // 0 - ext pulse, leading edge, // 1 - ext pulse, trailing edge Loading Loading @@ -342,7 +342,7 @@ static struct file_operations imu_fops = { }; static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first, 4 - set divisor, 8 set regs, 16 - set period // IMU should be enable through i2c before opening // IMU should be enabled through i2c before opening int i,j,b,f,n; int nmea_sel[16]; int nmea_fpga_frmt[16]; Loading @@ -357,10 +357,12 @@ static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first x393_logger_address_t logger_address; x393_logger_data_t logger_data; x393_gpio_set_pins_t gpio_set_pins; // D(int i2c_err=0;) int i2c_err=0; dev_info(g_dev_ptr,"============ which = 0x%x =============== \n",which); dev_dbg(g_dev_ptr,"============ which = 0x%x =============== \n",which); D(for (i=0; i< sizeof (wbuf); i++ ) { if ((i & 0x1f)==0) printk("\n %03x",i); printk(" %02x",(int) wbuf[i]); }); if (which & WHICH_RESET) { if (logger_is_dma_on()!=0) { Loading @@ -386,6 +388,7 @@ static void set_logger_params(int which){ // 1 - program IOPINS, 2 - reset first dev_dbg(g_dev_ptr,"Enabling I/O pins for IMU, written 0x%x to 0x%x\n", (int) X313_WA_IOPINS_EN_IMU, (int) X313_WA_IOPINS); port_csp0_addr[X313_WA_IOPINS] = X313_WA_IOPINS_EN_IMU; #else dev_info(g_dev_ptr,"Enabling I/O pins for IMU\n"); dev_dbg(g_dev_ptr,"Enabling I/O pins for IMU\n"); gpio_set_pins.d32 = 0; gpio_set_pins.chn_c = 3; // enable Loading Loading @@ -628,6 +631,7 @@ static int imu_open(struct inode *inode, struct file *filp) { if (logger_is_dma_on()==0) { /// copy defaults dev_dbg(g_dev_ptr,"Initializing IMU\n"); dev_info(g_dev_ptr,"imu_open(): Initializing IMU\n"); for (i=0;i<sizeof(wbuf);i++) wbuf[i]=dflt_wbuf[i]; set_logger_params(WHICH_INIT | WHICH_RESET | Loading Loading @@ -708,15 +712,20 @@ static ssize_t imu_write(struct file * file, const char * buf, size_t count, lof if (left==0) return 0; if (copy_from_user(&wbuf[p], buf, count)) return -EFAULT; if (p<(X313_IMU_PERIOD_OFFS+4)) which |= WHICH_PERIOD; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_DIVISOR_OFFS+4)) && ((p+count)>X313_IMU_DIVISOR_OFFS)) which |= WHICH_DIVISOR; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_RS232DIV_OFFS+4)) && ((p+count)>X313_IMU_RS232DIV_OFFS)) which |= WHICH_RS232DIV; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); // if ((p<(X313_IMU_CONFIGURE_OFFS+4)) && ((p+count)>X313_IMU_CONFIGURE_OFFS)) which |= WHICH_CONFIG; if ((p<(X313_IMU_CONFIGURE_OFFS+4)) && ((p+count)>X313_IMU_CONFIGURE_OFFS)) which |= WHICH_CONFIG | WHICH_INIT; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_NMEA_FORMAT_OFFS)) && ((p+count)>X313_IMU_REGISTERS_OFFS)) which |= WHICH_REGISTERS; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p<(X313_IMU_MESSAGE_OFFS)) && ((p+count)>X313_IMU_NMEA_FORMAT_OFFS)) which |= WHICH_NMEA; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); if ((p+count)>X313_IMU_MESSAGE_OFFS) which |= WHICH_MESSAGE; dev_dbg(g_dev_ptr,"which= 0x%x\n",which); // will not add automatic restarts here set_logger_params(which); // if (which & WHICH_PERIOD) num_reads=0; Loading Loading @@ -880,7 +889,7 @@ static ssize_t imu_read(struct file * file, char * buf, size_t count, loff_t *of err=copy_to_user(buf, &charDMABuf[byteIndexRead], (pe-byteIndexRead)); if (err) { dev_err(g_dev_ptr,"1. tried to copy 0x%x bytes to offset 0x%llx, result=0x%x\n", count, *off,err); //[ 811.889488] imu_logger elphel393-logger@0: 1. tried to copy 0x1000 bytes to offset 0x0, result=0x400000 return -EFAULT; } // advance pointers Loading Loading @@ -944,10 +953,10 @@ static int logger_init(struct platform_device *pdev) unsigned int irq; int res; struct device *dev = &pdev->dev; g_dev_ptr = dev; const struct of_device_id *match; const char *logger_irq_names[4] = {"mult_saxi_0", "mult_saxi_1", "mult_saxi_2", "mult_saxi_3"}; g_dev_ptr = dev; /* sanity check */ match = of_match_device(elphel393_logger_of_match, dev); Loading Loading @@ -1138,6 +1147,8 @@ void logger_dma_start(void) { #else logger_dma_ctrl(LOGGER_DMA_RUN); #endif dev_dbg(g_dev_ptr,"----------logger_dma_start\n"); dev_info(g_dev_ptr,"----------logger_dma_start\n"); dma_is_on=1; } Loading @@ -1146,9 +1157,8 @@ void logger_dma_start(void) { ///dma0 is using external dma 3 (input) with dma channel 9 ///dma1 (this) is using external dma 1 (input) with dma channel 7 (shared with async. serial 0, so do not use DMA there!) unsigned long x313_dma1_init(void) { int rslt; dma_is_on=0; #ifdef NC353 int rslt; reg_dma_rw_cfg cfg = {.en = regk_dma_yes}; // if disabled - will be busy and hang on attemt of DMA_WR_CMD reg_bif_dma_rw_ch1_ctrl exdma_ctrl = { .bw = regk_bif_dma_bw32, Loading Loading @@ -1207,6 +1217,7 @@ unsigned long x313_dma1_init(void) { x313_setDMA1Buffer(); return ((unsigned long)virt_to_phys(logger_buffer)) | 0x80000000; #endif dma_is_on=0; return 0; } Loading
src/drivers/elphel/pgm_functions.c +7 −4 Original line number Diff line number Diff line Loading @@ -405,8 +405,10 @@ int pgm_detectsensor (int sensor_port, ///< sensor port number ( legacy_i2c(1<<sensor_port);// Setup i2c pages for legacy i2c commands. TODO NC393: update for compatibility with 14MPix camsync_mode.trig = 0; camsync_mode.trig_set = 1; camsync_mode.ext = 1; // use external timestamp (default) camsync_mode.ext_set = 1; // This causes mismatch with parameters, let it be there // camsync_mode.ext = 1; // use external timestamp (default) // camsync_mode.ext_set = 1; x393_camsync_mode (camsync_mode); // dev_dbg(g_dev_ptr,"trying MT9P001\n"); Loading Loading @@ -731,8 +733,9 @@ typedef union { camsync_mode.en = 1; camsync_mode.en_set = 1; camsync_mode.ext = 1; // 0; camsync_mode.ext_set = 1; // Causes mismatch with parameters, let it be there // camsync_mode.ext = 1; // 0; // camsync_mode.ext_set = 1; camsync_mode.trig = 0; camsync_mode.trig_set = 1; Loading