mirror of https://gitee.com/openkylin/linux.git
greybus: fix vendor and product matching
Fix vendor and product matching by matching on the 32-bit Ara vendor and product ids. Remove the "fake" 16-bit vendor and product ids and export the Ara ids using the "vendor" and "product" interface attributes instead. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
8034bd561d
commit
f65fa47f28
|
@ -41,7 +41,7 @@ static int download_firmware(struct gb_firmware *firmware, u8 stage)
|
||||||
snprintf(firmware_name, sizeof(firmware_name),
|
snprintf(firmware_name, sizeof(firmware_name),
|
||||||
"ara:%08x:%08x:%08x:%08x:%02x.tftf",
|
"ara:%08x:%08x:%08x:%08x:%02x.tftf",
|
||||||
intf->unipro_mfg_id, intf->unipro_prod_id,
|
intf->unipro_mfg_id, intf->unipro_prod_id,
|
||||||
intf->ara_vend_id, intf->ara_prod_id, stage);
|
intf->vendor, intf->product, stage);
|
||||||
|
|
||||||
return request_firmware(&firmware->fw, firmware_name,
|
return request_firmware(&firmware->fw, firmware_name,
|
||||||
&connection->bundle->dev);
|
&connection->bundle->dev);
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
|
|
||||||
struct greybus_bundle_id {
|
struct greybus_bundle_id {
|
||||||
__u16 match_flags;
|
__u16 match_flags;
|
||||||
__u16 vendor;
|
__u32 vendor;
|
||||||
__u16 product;
|
__u32 product;
|
||||||
__u8 class;
|
__u8 class;
|
||||||
|
|
||||||
kernel_ulong_t driver_info __aligned(sizeof(kernel_ulong_t));
|
kernel_ulong_t driver_info __aligned(sizeof(kernel_ulong_t));
|
||||||
|
|
|
@ -22,16 +22,14 @@ struct gb_interface {
|
||||||
u8 device_id; /* Device id allocated for the interface block by the SVC */
|
u8 device_id; /* Device id allocated for the interface block by the SVC */
|
||||||
|
|
||||||
/* Information taken from the manifest descriptor */
|
/* Information taken from the manifest descriptor */
|
||||||
u16 vendor;
|
|
||||||
u16 product;
|
|
||||||
char *vendor_string;
|
char *vendor_string;
|
||||||
char *product_string;
|
char *product_string;
|
||||||
|
|
||||||
/* Information taken from the hotplug event */
|
/* Information taken from the hotplug event */
|
||||||
u32 unipro_mfg_id;
|
u32 unipro_mfg_id;
|
||||||
u32 unipro_prod_id;
|
u32 unipro_prod_id;
|
||||||
u32 ara_vend_id;
|
u32 vendor;
|
||||||
u32 ara_prod_id;
|
u32 product;
|
||||||
|
|
||||||
struct gb_module *module;
|
struct gb_module *module;
|
||||||
struct gb_host_device *hd;
|
struct gb_host_device *hd;
|
||||||
|
|
|
@ -392,11 +392,6 @@ static bool gb_manifest_parse_interface(struct gb_interface *intf,
|
||||||
if (IS_ERR(intf->product_string))
|
if (IS_ERR(intf->product_string))
|
||||||
goto out_free_vendor_string;
|
goto out_free_vendor_string;
|
||||||
|
|
||||||
// FIXME
|
|
||||||
// Vendor, Product and Unique id must come via control protocol
|
|
||||||
intf->vendor = 0xffff;
|
|
||||||
intf->product = 0x0001;
|
|
||||||
|
|
||||||
/* Release the interface descriptor, now that we're done with it */
|
/* Release the interface descriptor, now that we're done with it */
|
||||||
release_manifest_descriptor(interface_desc);
|
release_manifest_descriptor(interface_desc);
|
||||||
|
|
||||||
|
|
|
@ -460,8 +460,8 @@ static void svc_process_hotplug(struct work_struct *work)
|
||||||
|
|
||||||
intf->unipro_mfg_id = le32_to_cpu(hotplug->data.unipro_mfg_id);
|
intf->unipro_mfg_id = le32_to_cpu(hotplug->data.unipro_mfg_id);
|
||||||
intf->unipro_prod_id = le32_to_cpu(hotplug->data.unipro_prod_id);
|
intf->unipro_prod_id = le32_to_cpu(hotplug->data.unipro_prod_id);
|
||||||
intf->ara_vend_id = le32_to_cpu(hotplug->data.ara_vend_id);
|
intf->vendor = le32_to_cpu(hotplug->data.ara_vend_id);
|
||||||
intf->ara_prod_id = le32_to_cpu(hotplug->data.ara_prod_id);
|
intf->product = le32_to_cpu(hotplug->data.ara_prod_id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a device id for the interface:
|
* Create a device id for the interface:
|
||||||
|
|
Loading…
Reference in New Issue