Commit 81559b1f authored by Oleg Dzhimiev's avatar Oleg Dzhimiev
Browse files

changes for mux and mux broadcast address

parent e5bb1292
Loading
Loading
Loading
Loading
+11 −6
Original line number Original line Diff line number Diff line
@@ -45,10 +45,10 @@ struct sensor_port_config_t *pSensorPortConfig;


// removed static to export
// removed static to export
static struct sensor_port_config_t sensorPortConfig[] = {
static struct sensor_port_config_t sensorPortConfig[] = {
        {.mux=SENSOR_NONE,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.broadcast_addr=0,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.broadcast_addr=0,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.broadcast_addr=0,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}},
        {.mux=SENSOR_NONE,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}}
        {.mux=SENSOR_NONE,.broadcast_addr=0,.sensor={SENSOR_NONE,SENSOR_NONE,SENSOR_NONE,SENSOR_NONE}}
};
};


static const struct of_device_id elphel393_detect_sensors_of_match[];
static const struct of_device_id elphel393_detect_sensors_of_match[];
@@ -126,6 +126,11 @@ sens_iface_t get_iface_by_code(int code, ///< sensor code
    return NONE;
    return NONE;
}
}


/** Get sensor port multiplexer type */
int set_broadcast_address(int port,int value){
	sensorPortConfig[port & 3].broadcast_addr = value;
	return 0;
}


/** Get sensor port multiplexer type */
/** Get sensor port multiplexer type */
int get_detected_mux_code(int port) ///< Sensor port number (0..3)
int get_detected_mux_code(int port) ///< Sensor port number (0..3)
@@ -398,7 +403,7 @@ static int elphel393_detect_sensors_sysfs_register(struct platform_device *pdev)
 * @param table - pointer to the global struct
 * @param table - pointer to the global struct
 * @return 0
 * @return 0
 */
 */
static int par2addr_fill(const unsigned short *par2addr, u16 *table){
static int par2addr_fill(const unsigned short *par2addr, u32 *table){


	int i=0;
	int i=0;


@@ -407,7 +412,7 @@ static int par2addr_fill(const unsigned short *par2addr, u16 *table){


	// reset
	// reset
	for(i=0;i<MAX_SENSOR_REGS;i++){
	for(i=0;i<MAX_SENSOR_REGS;i++){
		table[i] = 0;
		table[i] = 0xffffffff;
	}
	}


	i=0;
	i=0;
+10 −2
Original line number Original line Diff line number Diff line
@@ -25,11 +25,18 @@
#define MAX_SENSOR_REGS 256
#define MAX_SENSOR_REGS 256
#define MAX_FPGA_RECS 256
#define MAX_FPGA_RECS 256


#define MUX_BROADCAST_INDEX 3

struct sensor_port_config_t {
struct sensor_port_config_t {
	u32  mux;                                    ///< Sensor multiplexer, currently 0 (SENSOR_DETECT, SENSOR_MUX_10359 or SENSOR_NONE)
	u32  mux;                                    ///< Sensor multiplexer, currently 0 (SENSOR_DETECT, SENSOR_MUX_10359 or SENSOR_NONE)
	u32  broadcast_addr;                         ///< For MUX: broadcast address for connected sensors, for single sensor it's 0, for mux: 3
    u32  sensor[MAX_SENSORS];                    ///< Without mux only [0] is used, with 10359 - 0..2 are used (i2c addressing is shifted so 0 is broadcast)
    u32  sensor[MAX_SENSORS];                    ///< Without mux only [0] is used, with 10359 - 0..2 are used (i2c addressing is shifted so 0 is broadcast)
    u16  par2addr[MAX_SENSORS][MAX_SENSOR_REGS]; ///< Big LUT. SENSOR_REGSxxx par to sensor reg 'yyy' internal address: haddr+laddr for 16 bit
    //u16  par2addr[MAX_SENSORS][MAX_SENSOR_REGS]; ///< Big LUT. SENSOR_REGSxxx par to sensor reg 'yyy' internal address: haddr+laddr for 16 bit
    u8   haddr2rec[MAX_SENSORS][MAX_FPGA_RECS];  ///< Big LUT (but almost empty). Sensor's page address (haddr of reg addr) to fpga i2c record number (fpga line#)
    // u32 for error handling
    u32  par2addr[MAX_SENSORS][MAX_SENSOR_REGS]; ///< Big LUT. SENSOR_REGSxxx par to sensor reg 'yyy' internal address: haddr+laddr for 16 bit
    //u8   haddr2rec[MAX_SENSORS][MAX_FPGA_RECS];  ///< Big LUT (but almost empty). Sensor's page address (haddr of reg addr) to fpga i2c record number (fpga line#)
    // u32 is for error handling
    u32   haddr2rec[MAX_SENSORS][MAX_FPGA_RECS];  ///< Big LUT (but almost empty). Sensor's page address (haddr of reg addr) to fpga i2c record number (fpga line#)
    unsigned short *pages_ptr[MAX_SENSORS];
    unsigned short *pages_ptr[MAX_SENSORS];
};
};


@@ -42,6 +49,7 @@ const char * get_name_by_code(int code, int type);
sens_iface_t get_iface_by_code(int code, int type);
sens_iface_t get_iface_by_code(int code, int type);


int get_detected_mux_code(int port);
int get_detected_mux_code(int port);
int set_broadcast_address(int port,int value);
int get_detected_sensor_code(int port, int sub_chn);
int get_detected_sensor_code(int port, int sub_chn);
int get_subchannels(int port);
int get_subchannels(int port);
int set_detected_mux_code(int port, int mux_type);
int set_detected_mux_code(int port, int mux_type);
+281 −30

File changed.

Preview size limit exceeded, changes collapsed.

+14 −0
Original line number Original line Diff line number Diff line
@@ -14,10 +14,15 @@
*  You should have received a copy of the GNU General Public License
*  You should have received a copy of the GNU General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
*******************************************************************************/
#ifndef _MT9F002_H
#define _MT9F002_H

#define MT9F002_PARTID     0x2E01 ///< MT9F002 PartID register value
#define MT9F002_PARTID     0x2E01 ///< MT9F002 PartID register value
#define MT9F002_I2C_ADDR     0x10 ///< MT9P I2C slave address (7 bit)
#define MT9F002_I2C_ADDR     0x10 ///< MT9P I2C slave address (7 bit)


#define MT9F002_RESET_REGISTER_VALUE 0x001c
#define MT9F002_RESET_REGISTER_VALUE 0x001c
// number of lines to sacrifice before generating Frame Valid
#define MT9F002_VACT_DELAY 2


/* ON Semi MT9F002 i2c register addresses */
/* ON Semi MT9F002 i2c register addresses */


@@ -556,6 +561,13 @@
#define P_MT9F002_ANALOG_GAIN_CODE_BLUE   18
#define P_MT9F002_ANALOG_GAIN_CODE_BLUE   18
#define P_MT9F002_COARSE_INTEGRATION_TIME 19
#define P_MT9F002_COARSE_INTEGRATION_TIME 19


#define P_MT9F002_Y_ADDR_START       20
#define P_MT9F002_Y_ADDR_END         21
#define P_MT9F002_X_ADDR_START       22
#define P_MT9F002_X_ADDR_END         23

#define P_MT9F002_READ_MODE          24

//#define P_REG(x) x
//#define P_REG(x) x


//#define P_MT9F002_MODEL_ID 4
//#define P_MT9F002_MODEL_ID 4
@@ -586,3 +598,5 @@ int mt9f002_pgm_detectsensor (int sensor_port, ///< sensor port
                                                               ///< @return 0 - OK, negative - error
                                                               ///< @return 0 - OK, negative - error
;
;
void mt9f002_set_device(struct device *dev);
void mt9f002_set_device(struct device *dev);

#endif
+1 −1
Original line number Original line Diff line number Diff line
@@ -1044,7 +1044,7 @@ int mt9x001_pgm_initsensor (int sensor_port, ///< sensor port


/** Program sensor WOI and mirroring
/** Program sensor WOI and mirroring
 * Validating, changing related parameters/scheduling actions, scheduling i2c commands
 * Validating, changing related parameters/scheduling actions, scheduling i2c commands
 * As different sensors may produce "bad frames" for differnt WOI changes (i.e. MT9P001 seems to do fine with FLIP, but not WOI_WIDTH)
 * As different sensors may produce "bad frames" for different WOI changes (i.e. MT9P001 seems to do fine with FLIP, but not WOI_WIDTH)
 * pgm_window and pgm_window_safe will do the same - they will just be called with different latencies and with compressor stopped)*/
 * pgm_window and pgm_window_safe will do the same - they will just be called with different latencies and with compressor stopped)*/
int mt9x001_pgm_window     (int sensor_port,               ///< sensor port number (0..3)
int mt9x001_pgm_window     (int sensor_port,               ///< sensor port number (0..3)
                            struct sensor_t * sensor,      ///< sensor static parameters (capabilities)
                            struct sensor_t * sensor,      ///< sensor static parameters (capabilities)
Loading