Commit 3c106d1d authored by Andrey Filippov's avatar Andrey Filippov

Making driver files compile

parent 581d1d2f
...@@ -23,3 +23,9 @@ obj-$(CONFIG_ELPHEL393) += quantization_tables.o ...@@ -23,3 +23,9 @@ obj-$(CONFIG_ELPHEL393) += quantization_tables.o
obj-$(CONFIG_ELPHEL393) += circbuf.o obj-$(CONFIG_ELPHEL393) += circbuf.o
obj-$(CONFIG_ELPHEL393) += jpeghead.o obj-$(CONFIG_ELPHEL393) += jpeghead.o
obj-$(CONFIG_ELPHEL393) += gamma_tables.o
obj-$(CONFIG_ELPHEL393) += histograms.o
obj-$(CONFIG_ELPHEL393) += pgm_functions.o
obj-$(CONFIG_ELPHEL393) += mt9x001.o
obj-$(CONFIG_ELPHEL393) += multi10359.o
...@@ -187,94 +187,95 @@ int x393_getClockFreq(int sensor_port, int nclock) { ...@@ -187,94 +187,95 @@ int x393_getClockFreq(int sensor_port, int nclock) {
EXPORT_SYMBOL_GPL(x393_getClockFreq); EXPORT_SYMBOL_GPL(x393_getClockFreq);
int x393_setClockFreq(int sensor_port, int nclock, int freq) { // freq now in Hz int x393_setClockFreq(int sensor_port, int nclock, int freq)
int err=0; { // freq now in Hz
sensor_port &= 3; int err=0;
nclock &= 3; sensor_port &= 3;
t_pll_params pll_params; nclock &= 3;
int i,bp,bq,bdiv,pllc,fact; t_pll_params pll_params;
bp=0; bq=0; bdiv=0; pllc= 0; // just to make gcc happy int i,bp,bq,bdiv,pllc,fact;
fact=0; bp=0; bq=0; bdiv=0; pllc= 0; // just to make gcc happy
dev_dbg(sdev, "setClockFreq(%d,%d,%d)\r\n",sensor_port,nclock,freq); fact=0;
if ((freq!=0) && (nclock!=3) ){ dev_dbg(sdev, "setClockFreq(%d,%d,%d)\r\n",sensor_port,nclock,freq);
if ( (i=calc_pll_params (freq, &pll_params)) !=0) { if ((freq!=0) && (nclock!=3) ){
dev_err(sdev, "bad frequency for clock %d - %d Hz, err=%d\n",nclock,freq,i); if ( (i=calc_pll_params (freq, &pll_params)) !=0) {
return -EINVAL; dev_err(sdev, "bad frequency for clock %d - %d Hz, err=%d\n",nclock,freq,i);
} return -EINVAL;
fact=CY22393_SCALE*(CY22393_XTAL*(pll_params.p+6)/(pll_params.q+2)/pll_params.dv); }
bp= pll_params.p; // (freqtab[freq]>>20)&0x7ff; fact=CY22393_SCALE*(CY22393_XTAL*(pll_params.p+6)/(pll_params.q+2)/pll_params.dv);
bq= pll_params.q; // (freqtab[freq]>>12)&0xff; bp= pll_params.p; // (freqtab[freq]>>20)&0x7ff;
bdiv=pll_params.dv; // (freqtab[freq]>> 4)&0xff; bq= pll_params.q; // (freqtab[freq]>>12)&0xff;
pllc=pll_params.corr; // freqtab[freq] &0x0f; bdiv=pll_params.dv; // (freqtab[freq]>> 4)&0xff;
} pllc=pll_params.corr; // freqtab[freq] &0x0f;
switch (nclock) { }
case 0: switch (nclock) {
if (freq==0) { case 0:
err |= setCYField (sensor_port,0x16, 0x40, 0x00); // turn off pll3 if (freq==0) {
err |= setCYField (sensor_port,0x09, 0x7f, 0x00); // turn off divider- A err |= setCYField (sensor_port,0x16, 0x40, 0x00); // turn off pll3
err |= setCYField (sensor_port,0x08, 0x7f, 0x00); // turn off divider- A err |= setCYField (sensor_port,0x09, 0x7f, 0x00); // turn off divider- A
} else { err |= setCYField (sensor_port,0x08, 0x7f, 0x00); // turn off divider- A
err |= setCYField (sensor_port,0x16, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) ); } else {
err |= setCYField (sensor_port,0x15, 0xff, ((bp & 0x1fe)>>1) ); err |= setCYField (sensor_port,0x16, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) );
err |= setCYField (sensor_port,0x14, 0xff, bq ); err |= setCYField (sensor_port,0x15, 0xff, ((bp & 0x1fe)>>1) );
err |= setCYField (sensor_port,0x09, 0x7f, bdiv); // set divider- A err |= setCYField (sensor_port,0x14, 0xff, bq );
err |= setCYField (sensor_port,0x08, 0x7f, bdiv); // set divider- A err |= setCYField (sensor_port,0x09, 0x7f, bdiv); // set divider- A
err |= setCYField (sensor_port,0x0e, 0x03, 0x03); // set PLL3 as source for ClkA err |= setCYField (sensor_port,0x08, 0x7f, bdiv); // set divider- A
} err |= setCYField (sensor_port,0x0e, 0x03, 0x03); // set PLL3 as source for ClkA
// fpga_state |= FPGA_STATE_CLOCKS; }
break; // fpga_state |= FPGA_STATE_CLOCKS;
case 1: break;
if (freq==0) { case 1:
err |= setCYField (sensor_port,0x0b, 0x7f, 0x00); // turn off divider- B if (freq==0) {
err |= setCYField (sensor_port,0x0a, 0x7f, 0x00); // turn off divider- B err |= setCYField (sensor_port,0x0b, 0x7f, 0x00); // turn off divider- B
for (i=0;i<24;i+=3) err |= setCYField (sensor_port,0x42+i, 0x40, 0x00); // turn off pll1 err |= setCYField (sensor_port,0x0a, 0x7f, 0x00); // turn off divider- B
} else { for (i=0;i<24;i+=3) err |= setCYField (sensor_port,0x42+i, 0x40, 0x00); // turn off pll1
// progam all variants } else {
for (i=0;i<24;i+=3) { // progam all variants
err |= setCYField (sensor_port,0x42+i, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) ); for (i=0;i<24;i+=3) {
err |= setCYField (sensor_port,0x41+i, 0xff, ((bp & 0x1fe)>>1) ); err |= setCYField (sensor_port,0x42+i, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) );
err |= setCYField (sensor_port,0x40+i, 0xff, bq ); err |= setCYField (sensor_port,0x41+i, 0xff, ((bp & 0x1fe)>>1) );
} err |= setCYField (sensor_port,0x40+i, 0xff, bq );
err |= setCYField (sensor_port,0x0b, 0x7f, bdiv); // set divider- B }
err |= setCYField (sensor_port,0x0a, 0x7f, bdiv); // set divider- B err |= setCYField (sensor_port,0x0b, 0x7f, bdiv); // set divider- B
err |= setCYField (sensor_port,0x0e, 0x0c, 0x04); // set PLL1 as source for ClkB err |= setCYField (sensor_port,0x0a, 0x7f, bdiv); // set divider- B
} err |= setCYField (sensor_port,0x0e, 0x0c, 0x04); // set PLL1 as source for ClkB
break; }
case 2: break;
if (freq==0) { case 2:
err |= setCYField (sensor_port,0x13, 0x40, 0x00); // turn off pll2 if (freq==0) {
err |= setCYField (sensor_port,0x0d, 0x7f, 0x00); // turn off divider- D err |= setCYField (sensor_port,0x13, 0x40, 0x00); // turn off pll2
} else { err |= setCYField (sensor_port,0x0d, 0x7f, 0x00); // turn off divider- D
err |= setCYField (sensor_port,0x13, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) ); } else {
err |= setCYField (sensor_port,0x12, 0xff, ((bp & 0x1fe)>>1) ); err |= setCYField (sensor_port,0x13, 0x7f, 0x40+(pllc<<3)+((bp & 1)<<2)+((bp & 0x600)>>9) );
err |= setCYField (sensor_port,0x11, 0xff, bq ); err |= setCYField (sensor_port,0x12, 0xff, ((bp & 0x1fe)>>1) );
err |= setCYField (sensor_port,0x0d, 0x7f, bdiv); // set divider- D err |= setCYField (sensor_port,0x11, 0xff, bq );
err |= setCYField (sensor_port,0x0e, 0xc0, 0x80); // set PLL2 as source for ClkD err |= setCYField (sensor_port,0x0d, 0x7f, bdiv); // set divider- D
} err |= setCYField (sensor_port,0x0e, 0xc0, 0x80); // set PLL2 as source for ClkD
break; }
case 3: break;
if ((freq!=0) && (freq!=CY22393_SCALE*CY22393_XTAL)) { case 3:
dev_err(sdev, "Only frequency 0 (off) and %d Hz (xtal) are allowed for channel 3\r\n",CY22393_SCALE*CY22393_XTAL); if ((freq!=0) && (freq!=CY22393_SCALE*CY22393_XTAL)) {
return -EINVAL; dev_err(sdev, "Only frequency 0 (off) and %d Hz (xtal) are allowed for channel 3\r\n",CY22393_SCALE*CY22393_XTAL);
} else { return -EINVAL;
// int setCYField (sensor_port,int devfd, int addr, int mask, int value) O_RDWR } else {
if (freq==0) { // int setCYField (sensor_port,int devfd, int addr, int mask, int value) O_RDWR
err |= setCYField (sensor_port,0x0f, 0x04, 0x00); if (freq==0) {
} else { err |= setCYField (sensor_port,0x0f, 0x04, 0x00);
err |= setCYField (sensor_port,0x0f, 0x04, 0x04); } else {
fact= CY22393_SCALE*CY22393_XTAL; err |= setCYField (sensor_port,0x0f, 0x04, 0x04);
} fact= CY22393_SCALE*CY22393_XTAL;
} }
break; }
default: return -1; // wrong clock number break;
} default: return -1; // wrong clock number
dev_dbg(sdev, "nclock=%d fact=%d\n",nclock,fact); }
if (err != 0) { dev_dbg(sdev, "nclock=%d fact=%d\n",nclock,fact);
dev_err(sdev, "Error programming clock %d fact=%d, err=0x%x\n",nclock,fact, err); if (err != 0) {
return err; dev_err(sdev, "Error programming clock %d fact=%d, err=0x%x\n",nclock,fact, err);
} return err;
clock_frequency[(sensor_port << 2) + nclock] = fact; }
return fact; clock_frequency[(sensor_port << 2) + nclock] = fact;
return fact;
} }
EXPORT_SYMBOL_GPL(x393_setClockFreq); EXPORT_SYMBOL_GPL(x393_setClockFreq);
......
...@@ -550,10 +550,10 @@ inline void processParsASAP(int sensor_port, struct sensorproc_t * sensorproc, i ...@@ -550,10 +550,10 @@ inline void processParsASAP(int sensor_port, struct sensorproc_t * sensorproc, i
framepars[4].functions, framepars[5].functions, framepars[6].functions, framepars[7].functions)); framepars[4].functions, framepars[5].functions, framepars[6].functions, framepars[7].functions));
if (sensorproc->pgm_func[i]) { if (sensorproc->pgm_func[i]) {
rslt = sensorproc->pgm_func[i] ( &(sensorproc->sensor), procpars, prevpars, -1); rslt = sensorproc->pgm_func[i] (sensor_port, &(sensorproc->sensor), procpars, prevpars, -1);
} else rslt = 0; // only sensor-specific function, nothing to do common to all sensors } else rslt = 0; // only sensor-specific function, nothing to do common to all sensors
if ((rslt >= 0) && (sensorproc->pgm_func[i + 32])) { // sensor - specific functions, called after the main ones if ((rslt >= 0) && (sensorproc->pgm_func[i + 32])) { // sensor - specific functions, called after the main ones
rslt = sensorproc->pgm_func[i + 32] ( &(sensorproc->sensor), procpars, prevpars, -1); rslt = sensorproc->pgm_func[i + 32] (sensor_port, &(sensorproc->sensor), procpars, prevpars, -1);
} }
// Nothing to do with errors here - just report? // Nothing to do with errors here - just report?
if (rslt < 0) printk("%s:%d:%s - error=%d", __FILE__, __LINE__, __FUNCTION__, rslt); if (rslt < 0) printk("%s:%d:%s - error=%d", __FILE__, __LINE__, __FUNCTION__, rslt);
...@@ -627,10 +627,10 @@ inline void processParsSeq(int sensor_port, struct sensorproc_t * sensorproc, in ...@@ -627,10 +627,10 @@ inline void processParsSeq(int sensor_port, struct sensorproc_t * sensorproc, in
if (sensorproc->pgm_func[i]) { if (sensorproc->pgm_func[i]) {
// NOTE: Was (frame8+job_ahead +1) & PARS_FRAMES_MASK // NOTE: Was (frame8+job_ahead +1) & PARS_FRAMES_MASK
rslt = sensorproc->pgm_func[i] ( &(sensorproc->sensor), procpars, prevpars, seq_frame); rslt = sensorproc->pgm_func[i] (sensor_port, &(sensorproc->sensor), procpars, prevpars, seq_frame);
} else rslt = 0; // only sensor-specific function, nothing to do common to all sensors } else rslt = 0; // only sensor-specific function, nothing to do common to all sensors
if ((rslt >= 0) && (sensorproc->pgm_func[i + 32])) { // sensor - specific functions, called after the main ones if ((rslt >= 0) && (sensorproc->pgm_func[i + 32])) { // sensor - specific functions, called after the main ones
rslt = sensorproc->pgm_func[i + 32] ( &(sensorproc->sensor), procpars, prevpars, seq_frame); rslt = sensorproc->pgm_func[i + 32] (sensor_port, &(sensorproc->sensor), procpars, prevpars, seq_frame);
} }
if (rslt >= 0) { if (rslt >= 0) {
procpars->functions &= ~mask; // mark it done procpars->functions &= ~mask; // mark it done
...@@ -1113,7 +1113,7 @@ loff_t framepars_lseek(struct file * file, loff_t offset, int orig) ...@@ -1113,7 +1113,7 @@ loff_t framepars_lseek(struct file * file, loff_t offset, int orig)
unsigned long target_frame; unsigned long target_frame;
struct framepars_pd * privData = (struct framepars_pd*) file -> private_data; struct framepars_pd * privData = (struct framepars_pd*) file -> private_data;
int sensor_port = privData -> minor - CMOSCAM_MINOR_FRAMEPARS_CHN_0; int sensor_port = privData -> minor - CMOSCAM_MINOR_FRAMEPARS_CHN_0;
struct framepars_t *framepars = aframepars[sensor_port]; // struct framepars_t *framepars = aframepars[sensor_port];
MDF1(printk(" offset=0x%x, orig=0x%x, sensor_port = %d\n", (int)offset, (int)orig, sensor_port)); MDF1(printk(" offset=0x%x, orig=0x%x, sensor_port = %d\n", (int)offset, (int)orig, sensor_port));
switch (orig) { switch (orig) {
case SEEK_SET: case SEEK_SET:
......
...@@ -7,11 +7,11 @@ int is_gamma_current (unsigned short hash16, unsigned short scale, int index); ...@@ -7,11 +7,11 @@ int is_gamma_current (unsigned short hash16, unsigned short scale, int index);
int is_gamma_valid (unsigned short hash16, unsigned short scale, int index); int is_gamma_valid (unsigned short hash16, unsigned short scale, int index);
// int prev_locked_color[4]; // int prev_locked_color[4];
int unlock_gamma_node (int color); /// NOTE: Not needed anymore int unlock_gamma_node (int color, int sensor_port, int sensor_subchn); /// NOTE: Not needed anymore
/// ///
/// return a pointer to the gamma table (single color) encoded in FPGA format (NULL if there is to table ready) /// return a pointer to the gamma table (single color) encoded in FPGA format (NULL if there is to table ready)
/// ///
unsigned long * get_gamma_fpga(int color); unsigned long * get_gamma_fpga(int color, int sensor_port, int sensor_subchn);
int gamma_new_node(void); int gamma_new_node(void);
void gamma_encode_fpga(unsigned short * gamma_in, unsigned long * gamma_out);///Hardware-dependent encoding of the FPGA "gamma" table. Converts unsigned short array of 257 16-bit values (only 10 msb-s are used) to 256 unsigned long words to be written to FPGA void gamma_encode_fpga(unsigned short * gamma_in, unsigned long * gamma_out);///Hardware-dependent encoding of the FPGA "gamma" table. Converts unsigned short array of 257 16-bit values (only 10 msb-s are used) to 256 unsigned long words to be written to FPGA
...@@ -27,5 +27,6 @@ void gamma_calc_reverse(unsigned short * gamma_in, unsigned char * gamma_out);/ ...@@ -27,5 +27,6 @@ void gamma_calc_reverse(unsigned short * gamma_in, unsigned char * gamma_out);/
// #define GAMMA_MODE_HARDWARE 4 // the table is needed to program FPGA: fpga-encoded table will be calculated (if not yet), node will be locked for specified // #define GAMMA_MODE_HARDWARE 4 // the table is needed to program FPGA: fpga-encoded table will be calculated (if not yet), node will be locked for specified
// color/frame pair // color/frame pair
int set_gamma_table (unsigned short hash16, unsigned short scale, unsigned short * gamma_proto, unsigned char mode, int color, int sensor_port, int sensor_subchn); int set_gamma_table (unsigned short hash16, unsigned short scale, unsigned short * gamma_proto, unsigned char mode, int color, int sensor_port, int sensor_subchn);
unsigned long get_locked_hash32(int color); unsigned long get_locked_hash32(int color, int sensor_port,int sensor_subchn);
#endif #endif
This diff is collapsed.
...@@ -26,7 +26,7 @@ int get_hist_index (int sensor_port, int sensor_chn); ...@@ -26,7 +26,7 @@ int get_hist_index (int sensor_port, int sensor_chn);
int set_histograms (int sensor_port, int sensor_chn, unsigned long frame, int needed, unsigned long * gammaHash, unsigned long * framep); int set_histograms (int sensor_port, int sensor_chn, unsigned long frame, int needed, unsigned long * gammaHash, unsigned long * framep);
int get_histograms (unsigned long frame, int needed); int get_histograms (int sensor_port, int sensor_chn, unsigned long frame, int needed);
int histograms_init_hardware(void); int histograms_init_hardware(void);
void histograms_dma_ctrl(int mode); // 0 - reset, 1 - disable, 2 - enable void histograms_dma_ctrl(int mode); // 0 - reset, 1 - disable, 2 - enable
This diff is collapsed.
void x313_dma1_start(void);
int x313_dma1_stop(void);
int x313_is_dma1_on(void);
unsigned long x313_dma1_init(void);
...@@ -72,12 +72,12 @@ ...@@ -72,12 +72,12 @@
#define CONFIG_ETRAX_ELPHEL_MT9X001 1 #define CONFIG_ETRAX_ELPHEL_MT9X001 1
//pgm_functions:pgm_detect_sensor
void x313_dma_stop() {} // void x313_dma_stop() {}
void x313_dma_init() {} // void x313_dma_init() {}
void reset_compressor() {} // void reset_compressor() {} // available in sensor_common (make sure it does it all
void i2c_run(void) {} void i2c_run(void);
void i2c_stop_wait(void){} void i2c_stop_wait(void);
// if ((gtable= get_gamma_fpga(color))) fpga_table_write_nice (CX313_FPGA_TABLES_GAMMA + (color * 256), 256, gtable); // if ((gtable= get_gamma_fpga(color))) fpga_table_write_nice (CX313_FPGA_TABLES_GAMMA + (color * 256), 256, gtable);
......
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -40,16 +40,18 @@ ...@@ -40,16 +40,18 @@
#include "framepars.h" #include "framepars.h"
#include "sensor_common.h" #include "sensor_common.h"
//#include "pgm_functions.h" #include "pgm_functions.h"
#include "circbuf.h" #include "circbuf.h"
#include "exif393.h" #include "exif393.h"
//#include "histograms.h" #include "histograms.h"
//#include "gamma_tables.h" #include "gamma_tables.h"
#include "quantization_tables.h" #include "quantization_tables.h"
#include "x393_macro.h" #include "x393_macro.h"
//#include "x393.h" #include "x393.h"
#include "x393_helpers.h" #include "x393_helpers.h"
#include <asm/delay.h> // just for usleep1000()
/** @brief Driver name to display in log messages.*/ /** @brief Driver name to display in log messages.*/
#define IMAGEACQ_DRIVER_NAME "Elphel (R) Model 393 Image Acquisition device driver" #define IMAGEACQ_DRIVER_NAME "Elphel (R) Model 393 Image Acquisition device driver"
...@@ -67,6 +69,18 @@ struct jpeg_ptr_t { ...@@ -67,6 +69,18 @@ struct jpeg_ptr_t {
volatile unsigned int flags; volatile unsigned int flags;
}; };
// just temporarily
void i2c_run(void) {}
void i2c_stop_wait(void){}
void udelay1000(int ms)
{
int i;
for (i=0;i<ms;i++) udelay(1000);
}
/** @brief Contains private data for the image acquisition driver */ /** @brief Contains private data for the image acquisition driver */
struct image_acq_pd_t { struct image_acq_pd_t {
int minor; ///< Driver minor number int minor; ///< Driver minor number
...@@ -410,26 +424,31 @@ inline struct interframe_params_t* updateIRQ_interframe(struct jpeg_ptr_t *jptr) ...@@ -410,26 +424,31 @@ inline struct interframe_params_t* updateIRQ_interframe(struct jpeg_ptr_t *jptr)
inline void updateIRQ_Exif(struct jpeg_ptr_t *jptr, struct interframe_params_t* interframe) { inline void updateIRQ_Exif(struct jpeg_ptr_t *jptr, struct interframe_params_t* interframe) {
unsigned char short_buff[2]; unsigned char short_buff[2];
unsigned int sensor_port = jptr->chn_num; unsigned int sensor_port = jptr->chn_num;
int index_time = jptr->jpeg_wp - 11; if (index_time<0) index_time+=get_globalParam (sensor_port, G_CIRCBUFSIZE)>>2; int index_time = jptr->jpeg_wp - 11;
char time_buff[27];
char * exif_meta_time_string;
int global_flips, extra_flips;
unsigned char orientations[]="1638274545273816";
unsigned char orientation_short[2];
int maker_offset;
if (index_time<0) index_time+=get_globalParam (sensor_port, G_CIRCBUFSIZE)>>2;
// struct exif_datetime_t // struct exif_datetime_t
// calculates datetime([20] and subsec[7], returns pointer to char[27] // calculates datetime([20] and subsec[7], returns pointer to char[27]
char time_buff[27]; exif_meta_time_string=encode_time(time_buff, ccam_dma_buf_ptr[sensor_port][index_time], ccam_dma_buf_ptr[sensor_port][index_time+1]);
char * exif_meta_time_string=encode_time(time_buff, ccam_dma_buf_ptr[sensor_port][index_time], ccam_dma_buf_ptr[sensor_port][index_time+1]);
// may be split in datetime/subsec - now it will not notice missing subseq field in template // may be split in datetime/subsec - now it will not notice missing subseq field in template
write_meta_irq(sensor_port, exif_meta_time_string, &meta_offsets.Photo_DateTimeOriginal, Exif_Photo_DateTimeOriginal, 27); write_meta_irq(sensor_port, exif_meta_time_string, &meta_offsets.Photo_DateTimeOriginal, Exif_Photo_DateTimeOriginal, 27);
write_meta_irq(sensor_port, exif_meta_time_string, &meta_offsets.Image_DateTime, Exif_Image_DateTime, 20); // may use 27 if room is provided write_meta_irq(sensor_port, exif_meta_time_string, &meta_offsets.Image_DateTime, Exif_Image_DateTime, 20); // may use 27 if room is provided
putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_EXPOS), &meta_offsets.Photo_ExposureTime, Exif_Photo_ExposureTime); putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_EXPOS), &meta_offsets.Photo_ExposureTime, Exif_Photo_ExposureTime);
putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_FRAME), &meta_offsets.Image_ImageNumber, Exif_Image_ImageNumber); putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_FRAME), &meta_offsets.Image_ImageNumber, Exif_Image_ImageNumber);
//Exif_Photo_MakerNote //Exif_Photo_MakerNote
int global_flips=(get_imageParamsThis(sensor_port, P_FLIPH) & 1) | ((get_imageParamsThis(sensor_port, P_FLIPV)<<1) & 2); global_flips=(get_imageParamsThis(sensor_port, P_FLIPH) & 1) | ((get_imageParamsThis(sensor_port, P_FLIPV)<<1) & 2);
int extra_flips=0; extra_flips=0;
if (get_imageParamsThis(sensor_port, P_MULTI_MODE)!=0) { if (get_imageParamsThis(sensor_port, P_MULTI_MODE)!=0) {
extra_flips=get_imageParamsThis(sensor_port, P_MULTI_MODE_FLIPS); extra_flips=get_imageParamsThis(sensor_port, P_MULTI_MODE_FLIPS);
global_flips=extra_flips & 3; global_flips=extra_flips & 3;
} }
unsigned char orientations[]="1638274545273816";
unsigned char orientation_short[2];
orientation_short[0]=0; orientation_short[0]=0;
orientation_short[1]=0xf & orientations[(get_imageParamsThis(sensor_port, P_PORTRAIT)&3) | (global_flips<<2)]; orientation_short[1]=0xf & orientations[(get_imageParamsThis(sensor_port, P_PORTRAIT)&3) | (global_flips<<2)];
write_meta_irq(sensor_port, orientation_short, &meta_offsets.Image_Orientation, Exif_Image_Orientation, 2); write_meta_irq(sensor_port, orientation_short, &meta_offsets.Image_Orientation, Exif_Image_Orientation, 2);
...@@ -441,7 +460,6 @@ inline void updateIRQ_Exif(struct jpeg_ptr_t *jptr, struct interframe_params_t* ...@@ -441,7 +460,6 @@ inline void updateIRQ_Exif(struct jpeg_ptr_t *jptr, struct interframe_params_t*
write_meta_irq(sensor_port, short_buff, &meta_offsets.PageNumber, Exif_Image_PageNumber, 2); write_meta_irq(sensor_port, short_buff, &meta_offsets.PageNumber, Exif_Image_PageNumber, 2);
//TODO - use memcpy //TODO - use memcpy
int maker_offset;
maker_offset=putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_GAINR), &meta_offsets.Photo_MakerNote, Exif_Photo_MakerNote); maker_offset=putlong_meta_irq(sensor_port, get_imageParamsThis(sensor_port, P_GAINR), &meta_offsets.Photo_MakerNote, Exif_Photo_MakerNote);
if (maker_offset>0) { if (maker_offset>0) {
putlong_meta_raw_irq(sensor_port, get_imageParamsThis(sensor_port, P_GAING), maker_offset+4); putlong_meta_raw_irq(sensor_port, get_imageParamsThis(sensor_port, P_GAING), maker_offset+4);
...@@ -660,8 +678,8 @@ void tasklet_fpga_function(unsigned long arg) { ...@@ -660,8 +678,8 @@ void tasklet_fpga_function(unsigned long arg) {
subchn, subchn,
prevFrameNumber, prevFrameNumber,
(1 << COLOR_Y_NUMBER), (1 << COLOR_Y_NUMBER),
hash32p+hist_indx*16*(sizeof u32), hash32p+hist_indx*16*sizeof (u32),
framep+hist_indx*32*(sizeof u32)); // 0x2 Green1 framep+hist_indx*32*sizeof (u32)); // 0x2 Green1
} else { } else {
set_histograms (sensor_port, subchn, prevFrameNumber, (1 << COLOR_Y_NUMBER), hash32p, framep); // 0x2 Green1 set_histograms (sensor_port, subchn, prevFrameNumber, (1 << COLOR_Y_NUMBER), hash32p, framep); // 0x2 Green1
} }
...@@ -723,8 +741,8 @@ if (hist_en) { ...@@ -723,8 +741,8 @@ if (hist_en) {
subchn, subchn,
prevFrameNumber, prevFrameNumber,
0xf, // all colors 0xf, // all colors
hash32p+hist_indx*16*(sizeof u32), hash32p+hist_indx*16*sizeof (u32),
framep+hist_indx*32*(sizeof u32)); // 0x2 Green1 framep+hist_indx*32*sizeof (u32)); // 0x2 Green1
} else { } else {
set_histograms (sensor_port, subchn, prevFrameNumber, 0xf, hash32p, framep); // 0x2 Green1 set_histograms (sensor_port, subchn, prevFrameNumber, 0xf, hash32p, framep); // 0x2 Green1
} }
...@@ -809,10 +827,10 @@ void camera_interrupts (int on) { ...@@ -809,10 +827,10 @@ void camera_interrupts (int on) {
int image_acq_init(struct platform_device *pdev) int image_acq_init(struct platform_device *pdev)
{ {
int i; int i;
int res; // int res;
unsigned int irq; unsigned int irq;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct of_device_id *match; // const struct of_device_id *match;
const char *frame_sync_irq_names[4] = {"frame_sync_irq_0", "frame_sync_irq_1", const char *frame_sync_irq_names[4] = {"frame_sync_irq_0", "frame_sync_irq_1",
"frame_sync_irq_2", "frame_sync_irq_3"}; "frame_sync_irq_2", "frame_sync_irq_3"};
const char *compressor_irq_names[4] = {"compr_irq_0", "compr_irq_1", const char *compressor_irq_names[4] = {"compr_irq_0", "compr_irq_1",
...@@ -915,10 +933,10 @@ int legacy_i2c(int ports) ///< bitmask of the sensor ports to use ...@@ -915,10 +933,10 @@ int legacy_i2c(int ports) ///< bitmask of the sensor ports to use
set_xi2c_wrc(&dev_sensor, sensor_port, dev_sensor.slave7, 0); set_xi2c_wrc(&dev_sensor, sensor_port, dev_sensor.slave7, 0);
} }
// Now register one page for reading 10359 and the sensor using sensor speed data // Now register one page for reading 10359 and the sensor using sensor speed data
memcpy(&dev_sensor, class_sensor, sizeof(class_sensor)); memcpy(&dev_sensor, class_sensor, sizeof(dev_sensor));
set_xi2c_rdc(&dev_sensor, sensor_port, LEGACY_READ_PAGE2, 0); set_xi2c_rdc(&dev_sensor, sensor_port, LEGACY_READ_PAGE2);
dev_sensor->data_bytes=4; // for reading 10359 in 32-bit mode dev_sensor.data_bytes=4; // for reading 10359 in 32-bit mode
set_xi2c_rdc(&dev_sensor, sensor_port, LEGACY_READ_PAGE4, 0); set_xi2c_rdc(&dev_sensor, sensor_port, LEGACY_READ_PAGE4);
} }
return 0; return 0;
} }
......
...@@ -121,6 +121,6 @@ long long get_frame_pos(unsigned int chn, unsigned int pos); ...@@ -121,6 +121,6 @@ long long get_frame_pos(unsigned int chn, unsigned int pos);
#define X3X3_I2C_RCV4(port,sa7,reg,datap) legacy_read_i2c_reg((port),(LEGACY_READ_PAGE4),(sa7),(reg),4,(datap)) #define X3X3_I2C_RCV4(port,sa7,reg,datap) legacy_read_i2c_reg((port),(LEGACY_READ_PAGE4),(sa7),(reg),4,(datap))
int legacy_i2c (int ports); int legacy_i2c (int ports);
void udelay1000(int ms);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment