Skip to content

Commit

Permalink
powerpc/ps3: Add a sub-match id to ps3_system_bus
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Masakazu Mokuno authored and Benjamin Herrenschmidt committed Jul 22, 2008
1 parent 6e5f153 commit 059e493
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 7 deletions.
1 change: 1 addition & 0 deletions arch/powerpc/platforms/ps3/device-init.c
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ static int __init ps3_register_graphics_devices(void)
return -ENOMEM;

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;

result = ps3_system_bus_device_register(&p->dev);
Expand Down
21 changes: 14 additions & 7 deletions arch/powerpc/platforms/ps3/system-bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -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_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)
pr_info("%s:%d: dev=%u(%s), drv=%u(%s): match\n", __func__,
__LINE__, dev->match_id, dev->core.bus_id,
drv->match_id, drv->core.name);
pr_info("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): match\n",
__func__, __LINE__,
dev->match_id, dev->match_sub_id, dev->core.bus_id,
drv->match_id, drv->match_sub_id, drv->core.name);
else
pr_debug("%s:%d: dev=%u(%s), drv=%u(%s): miss\n", __func__,
__LINE__, dev->match_id, dev->core.bus_id,
drv->match_id, drv->core.name);
pr_debug("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): miss\n",
__func__, __LINE__,
dev->match_id, dev->match_sub_id, dev->core.bus_id,
drv->match_id, drv->match_sub_id, drv->core.name);

return result;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/video/ps3fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1297,6 +1297,7 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev)

static struct ps3_system_bus_driver ps3fb_driver = {
.match_id = PS3_MATCH_ID_GRAPHICS,
.match_sub_id = PS3_MATCH_SUB_ID_FB,
.core.name = DEVICE_NAME,
.core.owner = THIS_MODULE,
.probe = ps3fb_probe,
Expand Down
7 changes: 7 additions & 0 deletions include/asm-powerpc/ps3.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,12 +337,18 @@ enum ps3_system_bus_device_type {
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 {
enum ps3_match_id match_id;
enum ps3_match_sub_id match_sub_id;
enum ps3_system_bus_device_type dev_type;

u64 bus_id; /* SB */
Expand Down Expand Up @@ -371,6 +377,7 @@ int ps3_close_hv_device(struct ps3_system_bus_device *dev);

struct ps3_system_bus_driver {
enum ps3_match_id match_id;
enum ps3_match_sub_id match_sub_id;
struct device_driver core;
int (*probe)(struct ps3_system_bus_device *);
int (*remove)(struct ps3_system_bus_device *);
Expand Down

0 comments on commit 059e493

Please sign in to comment.