powerpc/ps3: Add a sub-match id to ps3_system_bus
Add sub match id for ps3 system bus so that two different system bus devices can be connected to a shared device. Signed-off-by: Masakazu Mokuno <mokuno@sm.sony.co.jp> Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
6e5f153783
commit
059e4938f8
4 changed files with 23 additions and 7 deletions
|
@ -486,6 +486,7 @@ static int __init ps3_register_graphics_devices(void)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
p->dev.match_id = PS3_MATCH_ID_GRAPHICS;
|
p->dev.match_id = PS3_MATCH_ID_GRAPHICS;
|
||||||
|
p->dev.match_sub_id = PS3_MATCH_SUB_ID_FB;
|
||||||
p->dev.dev_type = PS3_DEVICE_TYPE_IOC0;
|
p->dev.dev_type = PS3_DEVICE_TYPE_IOC0;
|
||||||
|
|
||||||
result = ps3_system_bus_device_register(&p->dev);
|
result = ps3_system_bus_device_register(&p->dev);
|
||||||
|
|
|
@ -347,16 +347,23 @@ static int ps3_system_bus_match(struct device *_dev,
|
||||||
struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv);
|
struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv);
|
||||||
struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
|
struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
|
||||||
|
|
||||||
result = dev->match_id == drv->match_id;
|
if (!dev->match_sub_id)
|
||||||
|
result = dev->match_id == drv->match_id;
|
||||||
|
else
|
||||||
|
result = dev->match_sub_id == drv->match_sub_id &&
|
||||||
|
dev->match_id == drv->match_id;
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
pr_info("%s:%d: dev=%u(%s), drv=%u(%s): match\n", __func__,
|
pr_info("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): match\n",
|
||||||
__LINE__, dev->match_id, dev->core.bus_id,
|
__func__, __LINE__,
|
||||||
drv->match_id, drv->core.name);
|
dev->match_id, dev->match_sub_id, dev->core.bus_id,
|
||||||
|
drv->match_id, drv->match_sub_id, drv->core.name);
|
||||||
else
|
else
|
||||||
pr_debug("%s:%d: dev=%u(%s), drv=%u(%s): miss\n", __func__,
|
pr_debug("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): miss\n",
|
||||||
__LINE__, dev->match_id, dev->core.bus_id,
|
__func__, __LINE__,
|
||||||
drv->match_id, drv->core.name);
|
dev->match_id, dev->match_sub_id, dev->core.bus_id,
|
||||||
|
drv->match_id, drv->match_sub_id, drv->core.name);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1297,6 +1297,7 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev)
|
||||||
|
|
||||||
static struct ps3_system_bus_driver ps3fb_driver = {
|
static struct ps3_system_bus_driver ps3fb_driver = {
|
||||||
.match_id = PS3_MATCH_ID_GRAPHICS,
|
.match_id = PS3_MATCH_ID_GRAPHICS,
|
||||||
|
.match_sub_id = PS3_MATCH_SUB_ID_FB,
|
||||||
.core.name = DEVICE_NAME,
|
.core.name = DEVICE_NAME,
|
||||||
.core.owner = THIS_MODULE,
|
.core.owner = THIS_MODULE,
|
||||||
.probe = ps3fb_probe,
|
.probe = ps3fb_probe,
|
||||||
|
|
|
@ -337,12 +337,18 @@ enum ps3_system_bus_device_type {
|
||||||
PS3_DEVICE_TYPE_LPM,
|
PS3_DEVICE_TYPE_LPM,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ps3_match_sub_id {
|
||||||
|
/* for PS3_MATCH_ID_GRAPHICS */
|
||||||
|
PS3_MATCH_SUB_ID_FB = 1,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ps3_system_bus_device - a device on the system bus
|
* struct ps3_system_bus_device - a device on the system bus
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct ps3_system_bus_device {
|
struct ps3_system_bus_device {
|
||||||
enum ps3_match_id match_id;
|
enum ps3_match_id match_id;
|
||||||
|
enum ps3_match_sub_id match_sub_id;
|
||||||
enum ps3_system_bus_device_type dev_type;
|
enum ps3_system_bus_device_type dev_type;
|
||||||
|
|
||||||
u64 bus_id; /* SB */
|
u64 bus_id; /* SB */
|
||||||
|
@ -371,6 +377,7 @@ int ps3_close_hv_device(struct ps3_system_bus_device *dev);
|
||||||
|
|
||||||
struct ps3_system_bus_driver {
|
struct ps3_system_bus_driver {
|
||||||
enum ps3_match_id match_id;
|
enum ps3_match_id match_id;
|
||||||
|
enum ps3_match_sub_id match_sub_id;
|
||||||
struct device_driver core;
|
struct device_driver core;
|
||||||
int (*probe)(struct ps3_system_bus_device *);
|
int (*probe)(struct ps3_system_bus_device *);
|
||||||
int (*remove)(struct ps3_system_bus_device *);
|
int (*remove)(struct ps3_system_bus_device *);
|
||||||
|
|
Loading…
Add table
Reference in a new issue