mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
Reserve 4 adapter numbers for each DVB-C modulators
In order to determine on which tab/port modules are plugged, udev relies on adapter numbers which must remain multiple of 4.
This commit is contained in:
parent
53dc0b8905
commit
5ae225b1f6
@ -1564,7 +1564,8 @@ static int dvb_register_adapters(struct ddb *dev)
|
|||||||
adap = port->dvb[0].adap;
|
adap = port->dvb[0].adap;
|
||||||
ret = dvb_register_adapter(adap, "DDBridge", THIS_MODULE,
|
ret = dvb_register_adapter(adap, "DDBridge", THIS_MODULE,
|
||||||
port->dev->dev,
|
port->dev->dev,
|
||||||
adapter_nr);
|
adapter_nr,
|
||||||
|
dev->link[0].info->type == DDB_MOD ? 4 : 1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
port->dvb[0].adap_registered = 1;
|
port->dvb[0].adap_registered = 1;
|
||||||
@ -1584,7 +1585,8 @@ static int dvb_register_adapters(struct ddb *dev)
|
|||||||
ret = dvb_register_adapter(adap, "DDBridge",
|
ret = dvb_register_adapter(adap, "DDBridge",
|
||||||
THIS_MODULE,
|
THIS_MODULE,
|
||||||
port->dev->dev,
|
port->dev->dev,
|
||||||
adapter_nr);
|
adapter_nr,
|
||||||
|
1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
port->dvb[0].adap_registered = 1;
|
port->dvb[0].adap_registered = 1;
|
||||||
@ -1597,7 +1599,8 @@ static int dvb_register_adapters(struct ddb *dev)
|
|||||||
ret = dvb_register_adapter(adap, "DDBridge",
|
ret = dvb_register_adapter(adap, "DDBridge",
|
||||||
THIS_MODULE,
|
THIS_MODULE,
|
||||||
port->dev->dev,
|
port->dev->dev,
|
||||||
adapter_nr);
|
adapter_nr,
|
||||||
|
1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
port->dvb[1].adap_registered = 1;
|
port->dvb[1].adap_registered = 1;
|
||||||
@ -1609,7 +1612,8 @@ static int dvb_register_adapters(struct ddb *dev)
|
|||||||
ret = dvb_register_adapter(adap, "DDBridge",
|
ret = dvb_register_adapter(adap, "DDBridge",
|
||||||
THIS_MODULE,
|
THIS_MODULE,
|
||||||
port->dev->dev,
|
port->dev->dev,
|
||||||
adapter_nr);
|
adapter_nr,
|
||||||
|
1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
port->dvb[0].adap_registered = 1;
|
port->dvb[0].adap_registered = 1;
|
||||||
@ -1621,7 +1625,8 @@ static int dvb_register_adapters(struct ddb *dev)
|
|||||||
ret = dvb_register_adapter(adap, "DDBridge",
|
ret = dvb_register_adapter(adap, "DDBridge",
|
||||||
THIS_MODULE,
|
THIS_MODULE,
|
||||||
port->dev->dev,
|
port->dev->dev,
|
||||||
adapter_nr);
|
adapter_nr,
|
||||||
|
1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
port->dvb[0].adap_registered = 1;
|
port->dvb[0].adap_registered = 1;
|
||||||
|
@ -780,9 +780,10 @@ static int dvbdev_check_free_adapter_num(int num)
|
|||||||
list_for_each(entry, &dvb_adapter_list) {
|
list_for_each(entry, &dvb_adapter_list) {
|
||||||
struct dvb_adapter *adap;
|
struct dvb_adapter *adap;
|
||||||
adap = list_entry(entry, struct dvb_adapter, list_head);
|
adap = list_entry(entry, struct dvb_adapter, list_head);
|
||||||
if (adap->num == num)
|
if (num >= adap->num && num < adap->num + adap->num_reserved)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -802,7 +803,7 @@ static int dvbdev_get_free_adapter_num (void)
|
|||||||
|
|
||||||
int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
||||||
struct module *module, struct device *device,
|
struct module *module, struct device *device,
|
||||||
short *adapter_nums)
|
short *adapter_nums, int num_reserved)
|
||||||
{
|
{
|
||||||
int i, num;
|
int i, num;
|
||||||
|
|
||||||
@ -837,6 +838,7 @@ int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
|||||||
adap->device = device;
|
adap->device = device;
|
||||||
adap->mfe_shared = 0;
|
adap->mfe_shared = 0;
|
||||||
adap->mfe_dvbdev = NULL;
|
adap->mfe_dvbdev = NULL;
|
||||||
|
adap->num_reserved = num_reserved;
|
||||||
mutex_init (&adap->mfe_lock);
|
mutex_init (&adap->mfe_lock);
|
||||||
|
|
||||||
list_add_tail (&adap->list_head, &dvb_adapter_list);
|
list_add_tail (&adap->list_head, &dvb_adapter_list);
|
||||||
|
@ -95,6 +95,8 @@ struct dvb_adapter {
|
|||||||
struct dvb_device *mfe_dvbdev; /* frontend device in use */
|
struct dvb_device *mfe_dvbdev; /* frontend device in use */
|
||||||
struct mutex mfe_lock; /* access lock for thread creation */
|
struct mutex mfe_lock; /* access lock for thread creation */
|
||||||
|
|
||||||
|
int num_reserved;
|
||||||
|
|
||||||
#if defined(CONFIG_MEDIA_CONTROLLER_DVB)
|
#if defined(CONFIG_MEDIA_CONTROLLER_DVB)
|
||||||
struct media_device *mdev;
|
struct media_device *mdev;
|
||||||
struct media_entity *conn;
|
struct media_entity *conn;
|
||||||
@ -181,7 +183,7 @@ struct dvb_device {
|
|||||||
*/
|
*/
|
||||||
int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
int dvb_register_adapter(struct dvb_adapter *adap, const char *name,
|
||||||
struct module *module, struct device *device,
|
struct module *module, struct device *device,
|
||||||
short *adapter_nums);
|
short *adapter_nums, int num_reserved);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dvb_unregister_adapter - Unregisters a DVB adapter
|
* dvb_unregister_adapter - Unregisters a DVB adapter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user