Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 059e4938 authored by Masakazu Mokuno's avatar Masakazu Mokuno Committed by Benjamin Herrenschmidt
Browse files

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: default avatarMasakazu Mokuno <mokuno@sm.sony.co.jp>
Signed-off-by: default avatarGeoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 6e5f1537
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+14 −7
Original line number Diff line number Diff line
@@ -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);

	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;
}

+1 −0
Original line number Diff line number Diff line
@@ -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,
+7 −0
Original line number Diff line number Diff line
@@ -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 */
@@ -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 *);