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);
Loading