Loading src/drivers/elphel/mt9x001.c +25 −24 Original line number Original line Diff line number Diff line Loading @@ -805,6 +805,7 @@ int mt9x001_pgm_detectsensor (int sensor_port, ///< sensor port name = get_name_by_code(pcfg->sensor[0],DETECT_SENSOR); name = get_name_by_code(pcfg->sensor[0],DETECT_SENSOR); dc = xi2c_dev_get(name); dc = xi2c_dev_get(name); if (dc){ if (dc){ dev_dbg(g_dev_ptr,"{%d} setting i2c_addr to 0x%02x\n",sensor_port,dc->slave7); psensor->i2c_addr = dc->slave7; psensor->i2c_addr = dc->slave7; } } Loading Loading @@ -963,6 +964,7 @@ int mt9x001_pgm_initsensor (int sensor_port, ///< sensor port udelay ((debug_delays >> 8) & 0xff); // 100); udelay ((debug_delays >> 8) & 0xff); // 100); } } first_sensor_i2c=sensor->i2c_addr; first_sensor_i2c=sensor->i2c_addr; // TODO: get rid of first_sensor_i2c, leave only mux index if (GLOBALPARS(sensor_port, G_SENS_AVAIL)) { if (GLOBALPARS(sensor_port, G_SENS_AVAIL)) { first_sensor_i2c+= I2C359_INC * ((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 1)?1:((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 2)?2:3)); first_sensor_i2c+= I2C359_INC * ((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 1)?1:((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 2)?2:3)); } } Loading Loading @@ -1019,9 +1021,8 @@ int mt9x001_pgm_initsensor (int sensor_port, ///< sensor port for (i=0; i<sensor_register_overwrites_number;i++ ) { // unconditionally set those registers NOTE: Should be < 63 of them! for (i=0; i<sensor_register_overwrites_number;i++ ) { // unconditionally set those registers NOTE: Should be < 63 of them! SET_SENSOR_MBPAR(sensor_port, SET_SENSOR_MBPAR_LUT(sensor_port, frame16, // == -1 (immediate) frame16, // == -1 (immediate) sensor->i2c_addr, sensor_register_overwrites[2*i], sensor_register_overwrites[2*i], sensor_register_overwrites[2*i+1]); sensor_register_overwrites[2*i+1]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x,0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) sensor_register_overwrites[2*i], (int) sensor_register_overwrites[2*i+1]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x,0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) sensor_register_overwrites[2*i], (int) sensor_register_overwrites[2*i+1]); Loading Loading @@ -1105,7 +1106,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // program sensor width // program sensor width if ((ww-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_WIDTH]) { if ((ww-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_WIDTH]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_WIDTH, ww-1); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_WIDTH, ww-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_WIDTH, (int) ww-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_WIDTH, (int) ww-1); } } // height // height Loading @@ -1117,7 +1118,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // program sensor height // program sensor height if ((wh-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_HEIGHT]) { if ((wh-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_HEIGHT]) { SET_SENSOR_MBPAR(sensor_port, frame16 ,sensor->i2c_addr, P_MT9X001_HEIGHT, wh-1); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_HEIGHT, wh-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HEIGHT, (int) wh-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HEIGHT, (int) wh-1); } } // Margins // Margins Loading Loading @@ -1165,13 +1166,13 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // Program sensor left margin // Program sensor left margin if (wl != thispars->pars[P_SENSOR_REGS+P_MT9X001_COLSTART]) { if (wl != thispars->pars[P_SENSOR_REGS+P_MT9X001_COLSTART]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_COLSTART, wl); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_COLSTART, wl); dev_dbg(g_dev_ptr,"{%d} XSET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_COLSTART, (int) wl); dev_dbg(g_dev_ptr,"{%d} XSET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_COLSTART, (int) wl); } } // Program sensor top margin // Program sensor top margin if (wt != thispars->pars[P_SENSOR_REGS+P_MT9X001_ROWSTART]) { if (wt != thispars->pars[P_SENSOR_REGS+P_MT9X001_ROWSTART]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_ROWSTART, wt); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_ROWSTART, wt); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_ROWSTART,(int) wt); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_ROWSTART,(int) wt); } } ///TODO:Get rid of get_sensor_i2c_regs16 !!! ///TODO:Get rid of get_sensor_i2c_regs16 !!! Loading @@ -1179,19 +1180,19 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port if((styp == MT9T_TYP) || (styp == MT9P_TYP)) { // 3MPix and 5MPix sensors if((styp == MT9T_TYP) || (styp == MT9P_TYP)) { // 3MPix and 5MPix sensors v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM] & 0xff88) | ((bv - 1) << 4) | (dv - 1) ; v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM] & 0xff88) | ((bv - 1) << 4) | (dv - 1) ; if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM]) { SET_SENSOR_PAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RAM, v); SET_SENSOR_PAR_LUT(sensor_port, frame16, P_MT9X001_RAM, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RAM, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RAM, (int) v); } } v=(thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM] & 0xff88) | ((bh - 1) << 4) | (dh - 1); v=(thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM] & 0xff88) | ((bh - 1) << 4) | (dh - 1); if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM]) { SET_SENSOR_PAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_CAM, v); SET_SENSOR_PAR_LUT(sensor_port, frame16, P_MT9X001_CAM, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_CAM, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_CAM, (int) v); } } v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fff) | // preserve other bits from shadows v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fff) | // preserve other bits from shadows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipY ? (1 << 15) : 0) ; // FLIPV (flipY ? (1 << 15) : 0) ; // FLIPV if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE2, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE2, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); } } Loading @@ -1202,7 +1203,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port ((dh == 8) ? (1 << 4) : 0) | // Column skip 8 ((dh == 8) ? (1 << 4) : 0) | // Column skip 8 ((dv == 8) ? (1 << 5) : 0) ; // Row skip 8 ((dv == 8) ? (1 << 5) : 0) ; // Row skip 8 if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE1]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE1]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE1, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE1, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) v); } } v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fe7) | // preserve other bits from shadows v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fe7) | // preserve other bits from shadows Loading @@ -1211,7 +1212,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipY ? (1 << 15) : 0) ; // FLIPV (flipY ? (1 << 15) : 0) ; // FLIPV if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE2, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE2, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); } } Loading Loading @@ -1384,7 +1385,7 @@ int mt9x001_pgm_limitfps (int sensor_port, ///< sensor port numb // schedule updating P_MT9X001_HORBLANK senosr register and shadow FIXME: Seems hor_blank is too high. is the width itself subtracted? // schedule updating P_MT9X001_HORBLANK senosr register and shadow FIXME: Seems hor_blank is too high. is the width itself subtracted? if (hor_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]) { if (hor_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]) { dev_dbg(g_dev_ptr,"{%d} hor_blank =%d(0x%x), thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]=%d(0x%x)\n",sensor_port,hor_blank,hor_blank,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]); dev_dbg(g_dev_ptr,"{%d} hor_blank =%d(0x%x), thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]=%d(0x%x)\n",sensor_port,hor_blank,hor_blank,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]); SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_HORBLANK, hor_blank); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_HORBLANK, hor_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HORBLANK, (int)hor_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HORBLANK, (int)hor_blank); } } // Now calculate P_PERIOD (extending it as needed) // Now calculate P_PERIOD (extending it as needed) Loading Loading @@ -1469,7 +1470,7 @@ int mt9x001_pgm_limitfps (int sensor_port, ///< sensor port numb // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // schedule updating P_MT9X001_VERTBLANK sensor register and shadow dev_dbg(g_dev_ptr,"{%d} thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK] =%d(0x%x), vert_blank=%d(0x%x)\n",sensor_port,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],vert_blank,vert_blank); dev_dbg(g_dev_ptr,"{%d} thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK] =%d(0x%x), vert_blank=%d(0x%x)\n",sensor_port,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],vert_blank,vert_blank); if (vert_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK]) { if (vert_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_VERTBLANK, vert_blank); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_VERTBLANK, vert_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MPAR(0x%x, 0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_VERTBLANK, (int) vert_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MPAR(0x%x, 0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_VERTBLANK, (int) vert_blank); } } if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows Loading Loading @@ -1637,12 +1638,12 @@ int mt9x001_pgm_exposure (int sensor_port, ///< sensor port // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // high word of shutter width (>=3MPix) // high word of shutter width (>=3MPix) if (((styp == MT9T_TYP) || (styp == MT9P_TYP)) && ((video_exposure >> 16) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTHU])) { if (((styp == MT9T_TYP) || (styp == MT9P_TYP)) && ((video_exposure >> 16) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTHU])) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_SHTRWDTHU, video_exposure >> 16); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_SHTRWDTHU, video_exposure >> 16); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTHU, (int) (video_exposure >> 16)); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTHU, (int) (video_exposure >> 16)); } } // low word of shutter width (all sensors) // low word of shutter width (all sensors) if ((video_exposure & 0xffff) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTH]) { if ((video_exposure & 0xffff) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTH]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_SHTRWDTH, video_exposure & 0xffff); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_SHTRWDTH, video_exposure & 0xffff); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTH, (int) (video_exposure & 0xffff)); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTH, (int) (video_exposure & 0xffff)); } } // dev_dbg(g_dev_ptr,"{%d} nupdate=0x%x\n",sensor_port, (int) nupdate); // dev_dbg(g_dev_ptr,"{%d} nupdate=0x%x\n",sensor_port, (int) nupdate); Loading Loading @@ -1937,7 +1938,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain red if it was changed // apply sensor register gain red if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_RED]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_RED]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RED, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RED, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RED, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RED, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the red channel // schedule application of (residual after analog gain adjustment) digital gain to the red channel Loading @@ -1955,7 +1956,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain green if it was changed // apply sensor register gain green if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN1]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN1]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_GREEN1, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_GREEN1, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN1, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN1, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the green channel // schedule application of (residual after analog gain adjustment) digital gain to the green channel Loading @@ -1972,7 +1973,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain blue if it was changed // apply sensor register gain blue if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_BLUE]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_BLUE]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_BLUE, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_BLUE, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_BLUE, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_BLUE, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the blue channel // schedule application of (residual after analog gain adjustment) digital gain to the blue channel Loading @@ -1990,7 +1991,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain second green if it was changed // apply sensor register gain second green if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN2]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN2]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_GREEN2, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_GREEN2, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN2, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN2, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the second green channel // schedule application of (residual after analog gain adjustment) digital gain to the second green channel Loading @@ -2001,7 +2002,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb testmode= thispars->pars[P_TESTSENSOR ];// (on?0x10000:0) | (Micron_tests_mode) 0x0 - off, 0x10000..0x1000F testmode= thispars->pars[P_TESTSENSOR ];// (on?0x10000:0) | (Micron_tests_mode) 0x0 - off, 0x10000..0x1000F testmode= (testmode & 0x10000)? (((testmode & 0xf) << 3) | 1) : 0; testmode= (testmode & 0x10000)? (((testmode & 0xf) << 3) | 1) : 0; if (testmode != thispars->pars[P_SENSOR_REGS+P_MT9X001_TEST]) { if (testmode != thispars->pars[P_SENSOR_REGS+P_MT9X001_TEST]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr , P_MT9X001_TEST, testmode) ; SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_TEST, testmode) ; dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_TEST, (int) testmode); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_TEST, (int) testmode); } } Loading Loading @@ -2056,7 +2057,7 @@ int mt9x001_pgm_triggermode (int sensor_port, ///< sensor p if (!(thispars->pars[P_TRIG] & 4)){ if (!(thispars->pars[P_TRIG] & 4)){ frame16 = -1; frame16 = -1; } } SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_RMODE1, newreg); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE1, newreg); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) newreg); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) newreg); } } if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows Loading Loading @@ -2121,7 +2122,7 @@ int mt9x001_pgm_sensorregs (int sensor_port, ///< sensor port for (index=(index32<<5); mask; index++, mask >>= 1) { for (index=(index32<<5); mask; index++, mask >>= 1) { if (mask & 1) { if (mask & 1) { // apply broadcast register write and schedule change the individual ones (if they are not modified) // apply broadcast register write and schedule change the individual ones (if they are not modified) SET_SENSOR_MBOPAR(sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); SET_SENSOR_MBOPAR_LUT(sensor_port, frame16, (index-P_SENSOR_REGS),thispars->pars[index]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBOPAR(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n",sensor_port,sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBOPAR(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n",sensor_port,sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); } } } } Loading @@ -2141,9 +2142,9 @@ int mt9x001_pgm_sensorregs (int sensor_port, ///< sensor port for (index=(index32<<5); mask && (index < ((P_MULTI_REGS) + ((MAX_SENSORS) * (P_MULTI_NUMREGS)))); index++, mask >>= 1) { for (index=(index32<<5); mask && (index < ((P_MULTI_REGS) + ((MAX_SENSORS) * (P_MULTI_NUMREGS)))); index++, mask >>= 1) { if (mask & 1) { if (mask & 1) { if ((MULTIRVRSREG(sensor_port, index)) >0 ) { if ((MULTIRVRSREG(sensor_port, index)) >0 ) { X3X3_I2C_SEND2(sensor_port, X3X3_I2C_SEND2_LUT(sensor_port, frame16, frame16, sensor->i2c_addr + ((MULTIRVRSREG(sensor_port,index)>> 16) * I2C359_INC), (MULTIRVRSREG(sensor_port,index)>>16), ((MULTIRVRSREG(sensor_port,index) & 0xffff)-P_SENSOR_REGS), ((MULTIRVRSREG(sensor_port,index) & 0xffff)-P_SENSOR_REGS), thispars->pars[index]); thispars->pars[index]); dev_dbg(g_dev_ptr," X3X3_I2C_SEND2(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n", dev_dbg(g_dev_ptr," X3X3_I2C_SEND2(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n", Loading Loading
src/drivers/elphel/mt9x001.c +25 −24 Original line number Original line Diff line number Diff line Loading @@ -805,6 +805,7 @@ int mt9x001_pgm_detectsensor (int sensor_port, ///< sensor port name = get_name_by_code(pcfg->sensor[0],DETECT_SENSOR); name = get_name_by_code(pcfg->sensor[0],DETECT_SENSOR); dc = xi2c_dev_get(name); dc = xi2c_dev_get(name); if (dc){ if (dc){ dev_dbg(g_dev_ptr,"{%d} setting i2c_addr to 0x%02x\n",sensor_port,dc->slave7); psensor->i2c_addr = dc->slave7; psensor->i2c_addr = dc->slave7; } } Loading Loading @@ -963,6 +964,7 @@ int mt9x001_pgm_initsensor (int sensor_port, ///< sensor port udelay ((debug_delays >> 8) & 0xff); // 100); udelay ((debug_delays >> 8) & 0xff); // 100); } } first_sensor_i2c=sensor->i2c_addr; first_sensor_i2c=sensor->i2c_addr; // TODO: get rid of first_sensor_i2c, leave only mux index if (GLOBALPARS(sensor_port, G_SENS_AVAIL)) { if (GLOBALPARS(sensor_port, G_SENS_AVAIL)) { first_sensor_i2c+= I2C359_INC * ((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 1)?1:((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 2)?2:3)); first_sensor_i2c+= I2C359_INC * ((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 1)?1:((GLOBALPARS(sensor_port, G_SENS_AVAIL) & 2)?2:3)); } } Loading Loading @@ -1019,9 +1021,8 @@ int mt9x001_pgm_initsensor (int sensor_port, ///< sensor port for (i=0; i<sensor_register_overwrites_number;i++ ) { // unconditionally set those registers NOTE: Should be < 63 of them! for (i=0; i<sensor_register_overwrites_number;i++ ) { // unconditionally set those registers NOTE: Should be < 63 of them! SET_SENSOR_MBPAR(sensor_port, SET_SENSOR_MBPAR_LUT(sensor_port, frame16, // == -1 (immediate) frame16, // == -1 (immediate) sensor->i2c_addr, sensor_register_overwrites[2*i], sensor_register_overwrites[2*i], sensor_register_overwrites[2*i+1]); sensor_register_overwrites[2*i+1]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x,0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) sensor_register_overwrites[2*i], (int) sensor_register_overwrites[2*i+1]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x,0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) sensor_register_overwrites[2*i], (int) sensor_register_overwrites[2*i+1]); Loading Loading @@ -1105,7 +1106,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // program sensor width // program sensor width if ((ww-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_WIDTH]) { if ((ww-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_WIDTH]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_WIDTH, ww-1); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_WIDTH, ww-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_WIDTH, (int) ww-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_WIDTH, (int) ww-1); } } // height // height Loading @@ -1117,7 +1118,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // program sensor height // program sensor height if ((wh-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_HEIGHT]) { if ((wh-1) != thispars->pars[P_SENSOR_REGS+P_MT9X001_HEIGHT]) { SET_SENSOR_MBPAR(sensor_port, frame16 ,sensor->i2c_addr, P_MT9X001_HEIGHT, wh-1); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_HEIGHT, wh-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HEIGHT, (int) wh-1); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HEIGHT, (int) wh-1); } } // Margins // Margins Loading Loading @@ -1165,13 +1166,13 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port } } // Program sensor left margin // Program sensor left margin if (wl != thispars->pars[P_SENSOR_REGS+P_MT9X001_COLSTART]) { if (wl != thispars->pars[P_SENSOR_REGS+P_MT9X001_COLSTART]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_COLSTART, wl); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_COLSTART, wl); dev_dbg(g_dev_ptr,"{%d} XSET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_COLSTART, (int) wl); dev_dbg(g_dev_ptr,"{%d} XSET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_COLSTART, (int) wl); } } // Program sensor top margin // Program sensor top margin if (wt != thispars->pars[P_SENSOR_REGS+P_MT9X001_ROWSTART]) { if (wt != thispars->pars[P_SENSOR_REGS+P_MT9X001_ROWSTART]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_ROWSTART, wt); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_ROWSTART, wt); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_ROWSTART,(int) wt); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_ROWSTART,(int) wt); } } ///TODO:Get rid of get_sensor_i2c_regs16 !!! ///TODO:Get rid of get_sensor_i2c_regs16 !!! Loading @@ -1179,19 +1180,19 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port if((styp == MT9T_TYP) || (styp == MT9P_TYP)) { // 3MPix and 5MPix sensors if((styp == MT9T_TYP) || (styp == MT9P_TYP)) { // 3MPix and 5MPix sensors v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM] & 0xff88) | ((bv - 1) << 4) | (dv - 1) ; v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM] & 0xff88) | ((bv - 1) << 4) | (dv - 1) ; if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RAM]) { SET_SENSOR_PAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RAM, v); SET_SENSOR_PAR_LUT(sensor_port, frame16, P_MT9X001_RAM, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RAM, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RAM, (int) v); } } v=(thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM] & 0xff88) | ((bh - 1) << 4) | (dh - 1); v=(thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM] & 0xff88) | ((bh - 1) << 4) | (dh - 1); if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_CAM]) { SET_SENSOR_PAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_CAM, v); SET_SENSOR_PAR_LUT(sensor_port, frame16, P_MT9X001_CAM, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_CAM, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_PAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_CAM, (int) v); } } v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fff) | // preserve other bits from shadows v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fff) | // preserve other bits from shadows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipY ? (1 << 15) : 0) ; // FLIPV (flipY ? (1 << 15) : 0) ; // FLIPV if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE2, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE2, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); } } Loading @@ -1202,7 +1203,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port ((dh == 8) ? (1 << 4) : 0) | // Column skip 8 ((dh == 8) ? (1 << 4) : 0) | // Column skip 8 ((dv == 8) ? (1 << 5) : 0) ; // Row skip 8 ((dv == 8) ? (1 << 5) : 0) ; // Row skip 8 if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE1]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE1]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE1, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE1, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) v); } } v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fe7) | // preserve other bits from shadows v= (thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2] & 0x3fe7) | // preserve other bits from shadows Loading @@ -1211,7 +1212,7 @@ int mt9x001_pgm_window_common (int sensor_port, ///< sensor port (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipX ? (1 << 14) : 0) | // FLIPH - will control just alternative rows (flipY ? (1 << 15) : 0) ; // FLIPV (flipY ? (1 << 15) : 0) ; // FLIPV if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { if (v != thispars->pars[P_SENSOR_REGS+P_MT9X001_RMODE2]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RMODE2, v); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE2, v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE2, (int) v); } } Loading Loading @@ -1384,7 +1385,7 @@ int mt9x001_pgm_limitfps (int sensor_port, ///< sensor port numb // schedule updating P_MT9X001_HORBLANK senosr register and shadow FIXME: Seems hor_blank is too high. is the width itself subtracted? // schedule updating P_MT9X001_HORBLANK senosr register and shadow FIXME: Seems hor_blank is too high. is the width itself subtracted? if (hor_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]) { if (hor_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]) { dev_dbg(g_dev_ptr,"{%d} hor_blank =%d(0x%x), thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]=%d(0x%x)\n",sensor_port,hor_blank,hor_blank,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]); dev_dbg(g_dev_ptr,"{%d} hor_blank =%d(0x%x), thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]=%d(0x%x)\n",sensor_port,hor_blank,hor_blank,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_HORBLANK]); SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_HORBLANK, hor_blank); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_HORBLANK, hor_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HORBLANK, (int)hor_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_HORBLANK, (int)hor_blank); } } // Now calculate P_PERIOD (extending it as needed) // Now calculate P_PERIOD (extending it as needed) Loading Loading @@ -1469,7 +1470,7 @@ int mt9x001_pgm_limitfps (int sensor_port, ///< sensor port numb // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // schedule updating P_MT9X001_VERTBLANK sensor register and shadow dev_dbg(g_dev_ptr,"{%d} thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK] =%d(0x%x), vert_blank=%d(0x%x)\n",sensor_port,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],vert_blank,vert_blank); dev_dbg(g_dev_ptr,"{%d} thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK] =%d(0x%x), vert_blank=%d(0x%x)\n",sensor_port,(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],(int)thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK],vert_blank,vert_blank); if (vert_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK]) { if (vert_blank != thispars->pars[P_SENSOR_REGS+P_MT9X001_VERTBLANK]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_VERTBLANK, vert_blank); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_VERTBLANK, vert_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MPAR(0x%x, 0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_VERTBLANK, (int) vert_blank); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MPAR(0x%x, 0x%x,0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_VERTBLANK, (int) vert_blank); } } if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows Loading Loading @@ -1637,12 +1638,12 @@ int mt9x001_pgm_exposure (int sensor_port, ///< sensor port // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // schedule updating P_MT9X001_VERTBLANK sensor register and shadow // high word of shutter width (>=3MPix) // high word of shutter width (>=3MPix) if (((styp == MT9T_TYP) || (styp == MT9P_TYP)) && ((video_exposure >> 16) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTHU])) { if (((styp == MT9T_TYP) || (styp == MT9P_TYP)) && ((video_exposure >> 16) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTHU])) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_SHTRWDTHU, video_exposure >> 16); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_SHTRWDTHU, video_exposure >> 16); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTHU, (int) (video_exposure >> 16)); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTHU, (int) (video_exposure >> 16)); } } // low word of shutter width (all sensors) // low word of shutter width (all sensors) if ((video_exposure & 0xffff) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTH]) { if ((video_exposure & 0xffff) != thispars->pars[P_SENSOR_REGS+P_MT9X001_SHTRWDTH]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_SHTRWDTH, video_exposure & 0xffff); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_SHTRWDTH, video_exposure & 0xffff); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTH, (int) (video_exposure & 0xffff)); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_SHTRWDTH, (int) (video_exposure & 0xffff)); } } // dev_dbg(g_dev_ptr,"{%d} nupdate=0x%x\n",sensor_port, (int) nupdate); // dev_dbg(g_dev_ptr,"{%d} nupdate=0x%x\n",sensor_port, (int) nupdate); Loading Loading @@ -1937,7 +1938,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain red if it was changed // apply sensor register gain red if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_RED]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_RED]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_RED, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RED, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RED, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RED, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the red channel // schedule application of (residual after analog gain adjustment) digital gain to the red channel Loading @@ -1955,7 +1956,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain green if it was changed // apply sensor register gain green if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN1]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN1]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_GREEN1, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_GREEN1, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN1, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN1, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the green channel // schedule application of (residual after analog gain adjustment) digital gain to the green channel Loading @@ -1972,7 +1973,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain blue if it was changed // apply sensor register gain blue if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_BLUE]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_BLUE]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr, P_MT9X001_BLUE, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_BLUE, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_BLUE, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%0x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_BLUE, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the blue channel // schedule application of (residual after analog gain adjustment) digital gain to the blue channel Loading @@ -1990,7 +1991,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb maxAnaGain); maxAnaGain); // apply sensor register gain second green if it was changed // apply sensor register gain second green if it was changed if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN2]) { if (newRegGain != thispars->pars[P_SENSOR_REGS+P_MT9X001_GREEN2]) { SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_GREEN2, newRegGain); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_GREEN2, newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN2, (int) newRegGain); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_GREEN2, (int) newRegGain); } } // schedule application of (residual after analog gain adjustment) digital gain to the second green channel // schedule application of (residual after analog gain adjustment) digital gain to the second green channel Loading @@ -2001,7 +2002,7 @@ int mt9x001_pgm_gains (int sensor_port, ///< sensor port numb testmode= thispars->pars[P_TESTSENSOR ];// (on?0x10000:0) | (Micron_tests_mode) 0x0 - off, 0x10000..0x1000F testmode= thispars->pars[P_TESTSENSOR ];// (on?0x10000:0) | (Micron_tests_mode) 0x0 - off, 0x10000..0x1000F testmode= (testmode & 0x10000)? (((testmode & 0xf) << 3) | 1) : 0; testmode= (testmode & 0x10000)? (((testmode & 0xf) << 3) | 1) : 0; if (testmode != thispars->pars[P_SENSOR_REGS+P_MT9X001_TEST]) { if (testmode != thispars->pars[P_SENSOR_REGS+P_MT9X001_TEST]) { SET_SENSOR_MBPAR(sensor_port, frame16, sensor->i2c_addr , P_MT9X001_TEST, testmode) ; SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_TEST, testmode) ; dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_TEST, (int) testmode); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_TEST, (int) testmode); } } Loading Loading @@ -2056,7 +2057,7 @@ int mt9x001_pgm_triggermode (int sensor_port, ///< sensor p if (!(thispars->pars[P_TRIG] & 4)){ if (!(thispars->pars[P_TRIG] & 4)){ frame16 = -1; frame16 = -1; } } SET_SENSOR_MBPAR(sensor_port, frame16,sensor->i2c_addr, P_MT9X001_RMODE1, newreg); SET_SENSOR_MBPAR_LUT(sensor_port, frame16, P_MT9X001_RMODE1, newreg); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) newreg); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBPAR(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)\n",sensor_port, sensor_port, frame16, (int) sensor->i2c_addr, (int) P_MT9X001_RMODE1, (int) newreg); } } if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows if (nupdate) setFramePars(sensor_port,thispars, nupdate, pars_to_update); // save changes to gains and sensor register shadows Loading Loading @@ -2121,7 +2122,7 @@ int mt9x001_pgm_sensorregs (int sensor_port, ///< sensor port for (index=(index32<<5); mask; index++, mask >>= 1) { for (index=(index32<<5); mask; index++, mask >>= 1) { if (mask & 1) { if (mask & 1) { // apply broadcast register write and schedule change the individual ones (if they are not modified) // apply broadcast register write and schedule change the individual ones (if they are not modified) SET_SENSOR_MBOPAR(sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); SET_SENSOR_MBOPAR_LUT(sensor_port, frame16, (index-P_SENSOR_REGS),thispars->pars[index]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBOPAR(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n",sensor_port,sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); dev_dbg(g_dev_ptr,"{%d} SET_SENSOR_MBOPAR(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n",sensor_port,sensor_port, frame16, sensor->i2c_addr,(index-P_SENSOR_REGS),thispars->pars[index]); } } } } Loading @@ -2141,9 +2142,9 @@ int mt9x001_pgm_sensorregs (int sensor_port, ///< sensor port for (index=(index32<<5); mask && (index < ((P_MULTI_REGS) + ((MAX_SENSORS) * (P_MULTI_NUMREGS)))); index++, mask >>= 1) { for (index=(index32<<5); mask && (index < ((P_MULTI_REGS) + ((MAX_SENSORS) * (P_MULTI_NUMREGS)))); index++, mask >>= 1) { if (mask & 1) { if (mask & 1) { if ((MULTIRVRSREG(sensor_port, index)) >0 ) { if ((MULTIRVRSREG(sensor_port, index)) >0 ) { X3X3_I2C_SEND2(sensor_port, X3X3_I2C_SEND2_LUT(sensor_port, frame16, frame16, sensor->i2c_addr + ((MULTIRVRSREG(sensor_port,index)>> 16) * I2C359_INC), (MULTIRVRSREG(sensor_port,index)>>16), ((MULTIRVRSREG(sensor_port,index) & 0xffff)-P_SENSOR_REGS), ((MULTIRVRSREG(sensor_port,index) & 0xffff)-P_SENSOR_REGS), thispars->pars[index]); thispars->pars[index]); dev_dbg(g_dev_ptr," X3X3_I2C_SEND2(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n", dev_dbg(g_dev_ptr," X3X3_I2C_SEND2(0x%x, 0x%x, 0x%lx,0x%x,0x%lx)\n", Loading