V4L/DVB (10237): pvrusb2: Generate a device-unique identifier
Implement a new internal function to create a string device identifier. This ID stays with the specific device, making it useful to user space to identify specific devices. We use the serial number if available; otherwise we give up and just spit out a unit/instance ID. Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
d166b02ea6
Коммит
13a887971b
|
@ -195,8 +195,20 @@ struct pvr2_hdw {
|
|||
struct mutex big_lock_mutex;
|
||||
int big_lock_held; /* For debugging */
|
||||
|
||||
/* This is a simple string which identifies the instance of this
|
||||
driver. It is unique within the set of existing devices, but
|
||||
there is no attempt to keep the name consistent with the same
|
||||
physical device each time. */
|
||||
char name[32];
|
||||
|
||||
/* This is a simple string which identifies the physical device
|
||||
instance itself - if possible. (If not possible, then it is
|
||||
based on the specific driver instance, similar to name above.)
|
||||
The idea here is that userspace might hopefully be able to use
|
||||
this recognize specific tuners. It will encode a serial number,
|
||||
if available. */
|
||||
char identifier[32];
|
||||
|
||||
/* I2C stuff */
|
||||
struct i2c_adapter i2c_adap;
|
||||
struct i2c_algorithm i2c_algo;
|
||||
|
|
|
@ -1283,6 +1283,12 @@ const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
|
|||
}
|
||||
|
||||
|
||||
const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
|
||||
{
|
||||
return hdw->identifier;
|
||||
}
|
||||
|
||||
|
||||
unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
|
||||
{
|
||||
return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
|
||||
|
@ -2024,6 +2030,19 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
|
|||
hdw->std_mask_eeprom = V4L2_STD_ALL;
|
||||
}
|
||||
|
||||
if (hdw->serial_number) {
|
||||
idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
|
||||
"sn-%lu", hdw->serial_number);
|
||||
} else if (hdw->unit_number >= 0) {
|
||||
idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
|
||||
"unit-%c",
|
||||
hdw->unit_number + 'a');
|
||||
} else {
|
||||
idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
|
||||
"unit-??");
|
||||
}
|
||||
hdw->identifier[idx] = 0;
|
||||
|
||||
pvr2_hdw_setup_std(hdw);
|
||||
|
||||
if (!get_default_tuner_type(hdw)) {
|
||||
|
|
|
@ -132,6 +132,9 @@ unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *);
|
|||
/* Retrieve bus location info of device */
|
||||
const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *);
|
||||
|
||||
/* Retrieve per-instance string identifier for this specific device */
|
||||
const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *);
|
||||
|
||||
/* Called when hardware has been unplugged */
|
||||
void pvr2_hdw_disconnect(struct pvr2_hdw *);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче