ACPI / utils: add new helper for HID/UID match
Subsystems (5)
v2 cover ACPI / utils: add new helper for HID/UID match
There are few users outside of ACPI realm that re-introduce a custom solution to match ACPI device against HID/UID. Add a generic helper for them.
The series is supposed to go via linux-pm tree.
In v2:
- add patch 2 due to latent issue in the header (lkp)
- get rid of match_hid_uid() completely in patch 6
Andy Shevchenko (6):
ACPI / utils: Describe function parameters in kernel-doc ACPI / utils: Move acpi_dev_get_first_match_dev() under CONFIG_ACPI ACPI / utils: Introduce acpi_dev_hid_uid_match() helper ACPI / LPSS: Switch to use acpi_dev_hid_uid_match()
mmc: sdhci-acpi: Switch to use acpi_dev_hid_uid_match() iommu/amd: Switch to use acpi_dev_hid_uid_match()
drivers/acpi/acpi_lpss.c | 21 +++------------ drivers/acpi/utils.c | 32 +++++++++++++++++++++++ drivers/iommu/amd_iommu.c | 30 ++++----------------- drivers/mmc/host/sdhci-acpi.c | 49 ++++++++++++----------------------- include/acpi/acpi_bus.h | 8 +++--- include/linux/acpi.h | 6 +++++ 6 files changed, 67 insertions(+), 79 deletions(-)
Signature · 1 line
2.23.0
PATCH v2 1/6 ACPI / utils: Describe function parameters in kernel-doc
Kernel documentation script complains that some of the function parameters are not described:
drivers/acpi/utils.c:462: warning: Function parameter or member 'handle' not described in 'acpi_handle_path' drivers/acpi/utils.c:484: warning: Function parameter or member 'level' not described in 'acpi_handle_printk' drivers/acpi/utils.c:484: warning: Function parameter or member 'handle' not described in 'acpi_handle_printk' drivers/acpi/utils.c:484: warning: Function parameter or member 'fmt' not described in 'acpi_handle_printk' drivers/acpi/utils.c:513: warning: Function parameter or member 'descriptor' not described in '__acpi_handle_debug' drivers/acpi/utils.c:513: warning: Function parameter or member 'handle' not described in '__acpi_handle_debug' drivers/acpi/utils.c:513: warning: Function parameter or member 'fmt' not described in '__acpi_handle_debug'
Describe function parameters where it's appropriate.
--- drivers/acpi/utils.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/acpi/utils.c +7 -0
@@ -455,6 +455,7 @@ EXPORT_SYMBOL(acpi_evaluate_ost);/** * acpi_handle_path: Return the object path of handle +* @handle: ACPI device handle * * Caller must free the returned buffer */
@@ -473,6 +474,9 @@ static char *acpi_handle_path(acpi_handle handle)/** * acpi_handle_printk: Print message with ACPI prefix and object path +* @level: log level +* @handle: ACPI device handle +* @fmt: format string * * This function is called through acpi_handle_<level> macros and prints * a message with ACPI prefix and object path. This function acquires
@@ -501,6 +505,9 @@ EXPORT_SYMBOL(acpi_handle_printk);#if defined(CONFIG_DYNAMIC_DEBUG )/** * __acpi_handle_debug: pr_debug with ACPI prefix and object path +* @descriptor: Dynamic Debug descriptor +* @handle: ACPI device handle +* @fmt: format string * * This function is called through acpi_handle_debug macro and debug * prints a message with ACPI prefix and object path. This function
Signature · 1 line
2.23.0
Re: [PATCH v2 1/6] ACPI / utils: Describe function parameters in kernel-doc
Quoted 11 lines · Andy Shevchenko
Kernel documentation script complains that some of the function parameters are not described:
drivers/acpi/utils.c:462: warning: Function parameter or member 'handle' not described in 'acpi_handle_path'drivers/acpi/utils.c:484: warning: Function parameter or member 'level' not described in 'acpi_handle_printk'drivers/acpi/utils.c:484: warning: Function parameter or member 'handle' not described in 'acpi_handle_printk'drivers/acpi/utils.c:484: warning: Function parameter or member 'fmt' not described in 'acpi_handle_printk'drivers/acpi/utils.c:513: warning: Function parameter or member 'descriptor' not described in '__acpi_handle_debug'drivers/acpi/utils.c:513: warning: Function parameter or member 'handle' not described in '__acpi_handle_debug'drivers/acpi/utils.c:513: warning: Function parameter or member 'fmt' not described in '__acpi_handle_debug'
Quoted 3 lines
Describe function parameters where it's appropriate.
PATCH v2 2/6 ACPI / utils: Move acpi_dev_get_first_match_dev() under CONFIG_ACPI
In reply to Andy ShevchenkoWe have a stub defined for the acpi_dev_get_first_match_dev() in acpi.h for the case when CONFIG_ACPI=n.
Moreover, acpi_dev_put(), counterpart function, is already placed under CONFIG_ACPI.
Thus, move acpi_dev_get_first_match_dev() under CONFIG_ACPI as well.
--- include/acpi/acpi_bus.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
include/acpi/acpi_bus.h +3 -3
@@ -78,9 +78,6 @@ acpi_evaluate_dsm_typed(acpi_handle handle, const guid_t *guid, u64 rev,bool acpi_dev_found (const char *hid);bool acpi_dev_present (const char *hid,const char *uid,s64 hrv); -struct acpi_device * -acpi_dev_get_first_match_dev (const char *hid,const char *uid,s64 hrv); -#ifdef CONFIG_ACPI #include <linux/proc_fs.h>
@@ -683,6 +680,9 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev) adev->power.states[ACPI_STATE_D3_HOT].flags.explicit_set); } +struct acpi_device * +acpi_dev_get_first_match_dev (const char *hid,const char *uid,s64 hrv); +static inline void acpi_dev_put (struct acpi_device *adev) {put_device (&adev->dev);
Signature · 1 line
2.23.0
Re: [PATCH v2 2/6] ACPI / utils: Move acpi_dev_get_first_match_dev() under CONFIG_ACPI
Quoted 11 lines · Andy Shevchenko
We have a stub defined for the
acpi_dev_get_first_match_dev()inacpi.hfor the case whenCONFIG_ACPI=n.Moreover,
acpi_dev_put(), counterpart function, is already placed underCONFIG_ACPI.Thus, move
acpi_dev_get_first_match_dev()underCONFIG_ACPIas well.Fixes 817b4d64da03 ("Introduce acpi_dev_get_first_match_dev() helper")Reported-by kbuild test robot <[email protected]>
PATCH v2 3/6 ACPI / utils: Introduce acpi_dev_hid_uid_match() helper
In reply to Andy ShevchenkoThere are users outside of ACPI realm which reimplementing the comparator function to check if the given device matches to given HID and UID.
For better utilization, introduce a helper for everyone to use.
--- drivers/acpi/utils.c | 25 +++++++++++++++++++++++++ include/acpi/acpi_bus.h | 2 ++ include/linux/acpi.h | 6 ++++++ 3 files changed, 33 insertions(+)
drivers/acpi/utils.c +25 -0
@@ -701,6 +701,31 @@ bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 funcs) }EXPORT_SYMBOL (acpi_check_dsm); +/** +* acpi_dev_hid_uid_match - Match device by supplied HID and UID +* @adev: ACPI device to match. +* @hid2: Hardware ID of the device. +* @uid2: Unique ID of the device, pass NULL to not check _UID. +* +* Matches HID and UID in @adev with given @hid2 and @uid2. +* Returns true if matches. +*/ +bool acpi_dev_hid_uid_match (struct acpi_device *adev, +const char *hid2,const char *uid2) +{ +const char *hid1 =acpi_device_hid (adev); +const char *uid1 =acpi_device_uid (adev); + +if (strcmp (hid1, hid2)) +return false; + +if (!uid2) +return true; + +return uid1 && !strcmp (uid1, uid2); +} +EXPORT_SYMBOL (acpi_dev_hid_uid_match); +/** * acpi_dev_found - Detect presence of a given ACPI device in the namespace. * @hid: Hardware ID of the device.
include/acpi/acpi_bus.h +2 -0
@@ -680,6 +680,8 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev) adev->power.states[ACPI_STATE_D3_HOT].flags.explicit_set); } +bool acpi_dev_hid_uid_match (struct acpi_device *adev,const char *hid2,const char *uid2); +struct acpi_device *acpi_dev_get_first_match_dev (const char *hid,const char *uid,s64 hrv);
include/linux/acpi.h +6 -0
@@ -672,6 +672,12 @@ static inline bool acpi_dev_present(const char *hid, const char *uid, s64 hrv)return false; } +static inline bool +acpi_dev_hid_uid_match (struct acpi_device *adev,const char *hid2,const char *uid2) +{ +return false; +} +static inline struct acpi_device *acpi_dev_get_first_match_dev (const char *hid,const char *uid,s64 hrv) {
Signature · 1 line
2.23.0
Re: [PATCH v2 3/6] ACPI / utils: Introduce acpi_dev_hid_uid_match() helper
Quoted 35 lines · Andy Shevchenko
There are users outside of ACPI realm which reimplementing the comparator function to check if the given device matches to given HID and UID.
For better utilization, introduce a helper for everyone to use.
--- drivers/acpi/utils.c | 25 +++++++++++++++++++++++++ include/acpi/acpi_bus.h | 2 ++ include/linux/acpi.h | 6 ++++++ 3 files changed, 33 insertions(+)drivers/acpi/utils.c +14
-0@@ -701,6 +701,31 @@ bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 funcs) }EXPORT_SYMBOL (acpi_check_dsm); +/** +* acpi_dev_hid_uid_match - Match device by supplied HID and UID +* @adev: ACPI device to match. +* @hid2: Hardware ID of the device. +* @uid2: Unique ID of the device, pass NULL to not check _UID. +* +* Matches HID and UID in @adev with given @hid2 and @uid2. +* Returns true if matches. +*/ +bool acpi_dev_hid_uid_match (struct acpi_device *adev, +const char *hid2,const char *uid2) +{ +const char *hid1 =acpi_device_hid (adev); +const char *uid1 =acpi_device_uid (adev);
drivers/acpi/utils.c bool acpi_check_dsm(acpi_handle handle, const guid_t *guid, u64 rev, u64 funcs) · line 727
Quoted 10 lines
drivers/acpi/utils.c +10
-0+ +if (strcmp (hid1, hid2)) +return false; + +if (!uid2) +return true; + +return uid1 && !strcmp (uid1, uid2); +} +EXPORT_SYMBOL (acpi_dev_hid_uid_match);
Should this be _GPL?
In any case looks good,
Re: [PATCH v2 3/6] ACPI / utils: Introduce acpi_dev_hid_uid_match() helper
Quoted 9 lines · Mika Westerberg
Quoted 6 lines · Andy Shevchenko
There are users outside of ACPI realm which reimplementing the comparator function to check if the given device matches to given HID and UID.
For better utilization, introduce a helper for everyone to use.
+EXPORT_SYMBOL(acpi_dev_hid_uid_match);
Should this be
_GPL?
No, the rest of the acpi_dev_*() are marked without it.
Quoted 3 lines
In any case looks good,
Thanks!
Signature · 2 lines
With Best Regards, Andy Shevchenko
PATCH v2 4/6 ACPI / LPSS: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoSince we have a generic helper, drop custom implementation in the driver.
--- drivers/acpi/acpi_lpss.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-)
drivers/acpi/acpi_lpss.c +3 -18
@@ -476,31 +476,16 @@ static const struct lpss_device_links lpss_device_links[] = { {"80860F41", "5", "LNXVIDEO", NULL, DL_FLAG_PM_RUNTIME}, }; -static bool hid_uid_match (struct acpi_device *adev, -const char *hid2,const char *uid2) -{ -const char *hid1 =acpi_device_hid (adev); -const char *uid1 =acpi_device_uid (adev); - -if (strcmp (hid1, hid2)) -return false; - -if (!uid2) -return true; - -return uid1 && !strcmp (uid1, uid2); -} -static bool acpi_lpss_is_supplier (struct acpi_device *adev,const struct lpss_device_links *link) { -return hid_uid_match (adev, link->supplier_hid, link->supplier_uid); +return acpi_dev_hid_uid_match (adev, link->supplier_hid, link->supplier_uid); }static bool acpi_lpss_is_consumer (struct acpi_device *adev,const struct lpss_device_links *link) { -return hid_uid_match (adev, link->consumer_hid, link->consumer_uid); +return acpi_dev_hid_uid_match (adev, link->consumer_hid, link->consumer_uid); } struct hid_uid {
@@ -516,7 +501,7 @@ static int match_hid_uid(struct device *dev, const void *data)if (!adev)return 0 ; -return hid_uid_match (adev, id->hid, id->uid); +return acpi_dev_hid_uid_match (adev, id->hid, id->uid); }static struct device *acpi_lpss_find_device (const char *hid,const char *uid)
Signature · 1 line
2.23.0
Re: [PATCH v2 4/6] ACPI / LPSS: Switch to use acpi_dev_hid_uid_match()
Quoted 3 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
PATCH v2 5/6 mmc: sdhci-acpi: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoSince we have a generic helper, drop custom implementation in the driver.
--- drivers/mmc/host/sdhci-acpi.c | 49 ++++++++++++----------------------- 1 file changed, 16 insertions(+), 33 deletions(-)
drivers/mmc/host/sdhci-acpi.c +16 -33
@@ -61,7 +61,7 @@ struct sdhci_acpi_slot {mmc_pm_flag_t pm_caps;unsigned int flags;size_t priv_size; -int (*probe_slot)(struct platform_device *,const char *,const char *); +int (*probe_slot)(struct platform_device *,struct acpi_device *);int (*remove_slot)(struct platform_device *);int (*free_slot)(struct platform_device *pdev);int (*setup_host)(struct platform_device *pdev);
@@ -325,12 +325,10 @@ static bool sdhci_acpi_cht_pci_wifi(unsigned int vendor, unsigned int device,* wifi card in the expected slot with an ACPI companion node, is used to * indicate that acpi_device_fix_up_power() should be avoided. */ -static inline bool sdhci_acpi_no_fixup_child_power (const char *hid, -const char *uid) +static inline bool sdhci_acpi_no_fixup_child_power (struct acpi_device *adev) {return sdhci_acpi_cht () && - !strcmp (hid,"80860F14" ) && - !strcmp (uid,"2" ) && +acpi_dev_hid_uid_match (adev,"80860F14" ,"2" ) &&sdhci_acpi_cht_pci_wifi (0x14e4 ,0x43ec ,0 ,28 ); }
@@ -345,8 +343,7 @@ static inline bool sdhci_acpi_byt_defer(struct device *dev)return false; } -static inline bool sdhci_acpi_no_fixup_child_power (const char *hid, -const char *uid) +static inline bool sdhci_acpi_no_fixup_child_power (struct acpi_device *adev) {return false; }
@@ -375,19 +372,18 @@ static int bxt_get_cd(struct mmc_host *mmc)return ret; } -static int intel_probe_slot (struct platform_device *pdev,const char *hid, -const char *uid) +static int intel_probe_slot (struct platform_device *pdev,struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct intel_host *intel_host =sdhci_acpi_priv (c);struct sdhci_host *host = c->host; -if (hid && uid && !strcmp (hid,"80860F14" ) && !strcmp (uid,"1" ) && +if (acpi_dev_hid_uid_match (adev,"80860F14" ,"1" ) &&sdhci_readl (host,SDHCI_CAPABILITIES ) ==0x446cc8b2 &&sdhci_readl (host,SDHCI_CAPABILITIES_1 ) ==0x00000807 ) host->timeout_clk =1000 ;/* 1000 kHz i.e. 1 MHz */ -if (hid && !strcmp (hid,"80865ACA" )) +if (acpi_dev_hid_uid_match (adev,"80865ACA" ,NULL )) host->mmc_host_ops.get_cd = bxt_get_cd;intel_dsm_init (intel_host, &pdev->dev, host->mmc);
@@ -473,8 +469,7 @@ static irqreturn_t sdhci_acpi_qcom_handler(int irq, void *ptr)return IRQ_HANDLED ; } -static int qcom_probe_slot (struct platform_device *pdev,const char *hid, -const char *uid) +static int qcom_probe_slot (struct platform_device *pdev,struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct sdhci_host *host = c->host;
@@ -482,7 +477,7 @@ static int qcom_probe_slot(struct platform_device *pdev, const char *hid, *irq = -EINVAL ; -if (strcmp (hid,"QCOM8051" )) +if (acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))return 0 ; *irq =platform_get_irq (pdev,1 );
@@ -501,14 +496,12 @@ static int qcom_free_slot(struct platform_device *pdev)struct sdhci_host *host = c->host;struct acpi_device *adev;int *irq =sdhci_acpi_priv (c); -const char *hid; adev =ACPI_COMPANION (dev);if (!adev)return -ENODEV ; - hid =acpi_device_hid (adev); -if (strcmp (hid,"QCOM8051" )) +if (!acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))return 0 ;if (*irq <0 )
@@ -583,7 +576,7 @@ static const struct sdhci_acpi_chip sdhci_acpi_chip_amd = { };static int sdhci_acpi_emmc_amd_probe_slot (struct platform_device *pdev, -const char *hid,const char *uid) +struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct sdhci_host *host = c->host;
@@ -654,17 +647,12 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { };MODULE_DEVICE_TABLE (acpi, sdhci_acpi_ids); -static const struct sdhci_acpi_slot *sdhci_acpi_get_slot (const char *hid, -const char *uid) +static const struct sdhci_acpi_slot *sdhci_acpi_get_slot (struct acpi_device *adev) {const struct sdhci_acpi_uid_slot *u;for (u = sdhci_acpi_uids; u->hid; u++) { -if (strcmp (u->hid, hid)) -continue ; -if (!u->uid) -return u->slot; -if (uid && !strcmp (u->uid, uid)) +if (acpi_dev_hid_uid_match (adev, u->hid, u->uid))return u->slot; }return NULL ;
@@ -680,22 +668,17 @@ static int sdhci_acpi_probe(struct platform_device *pdev)struct resource *iomem;resource_size_t len;size_t priv_size; -const char *hid; -const char *uid;int err; device =ACPI_COMPANION (dev);if (!device)return -ENODEV ; - hid =acpi_device_hid (device); - uid =acpi_device_uid (device); - - slot =sdhci_acpi_get_slot (hid, uid); + slot =sdhci_acpi_get_slot (device);/* Power on the SDHCI controller and its children */ acpi_device_fix_up_power (device); -if (!sdhci_acpi_no_fixup_child_power (hid, uid)) { +if (!sdhci_acpi_no_fixup_child_power (device)) {list_for_each_entry (child, &device->children, node)if (child->status.present && child->status.enabled)acpi_device_fix_up_power (child);
@@ -745,7 +728,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev)if (c->slot) {if (c->slot->probe_slot) { - err = c->slot->probe_slot (pdev, hid, uid); + err = c->slot->probe_slot (pdev, device);if (err) goto err_free; }
Signature · 1 line
2.23.0
Re: [PATCH v2 5/6] mmc: sdhci-acpi: Switch to use acpi_dev_hid_uid_match()
Quoted 3 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
Adrian Hunter
maintainerRe: [PATCH v2 5/6] mmc: sdhci-acpi: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoQuoted 79 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
--- drivers/mmc/host/sdhci-acpi.c | 49 ++++++++++++----------------------- 1 file changed, 16 insertions(+), 33 deletions(-)drivers/mmc/host/sdhci-acpi.c +8
-13@@ -61,7 +61,7 @@ struct sdhci_acpi_slot {mmc_pm_flag_t pm_caps;unsigned int flags;size_t priv_size; -int (*probe_slot)(struct platform_device *,const char *,const char *); +int (*probe_slot)(struct platform_device *,struct acpi_device *);int (*remove_slot)(struct platform_device *);int (*free_slot)(struct platform_device *pdev);int (*setup_host)(struct platform_device *pdev);@@ -325,12 +325,10 @@ static bool sdhci_acpi_cht_pci_wifi(unsigned int vendor, unsigned int device,* wifi card in the expected slot with an ACPI companion node, is used to * indicate that acpi_device_fix_up_power() should be avoided. */ -static inline bool sdhci_acpi_no_fixup_child_power (const char *hid, -const char *uid) +static inline bool sdhci_acpi_no_fixup_child_power (struct acpi_device *adev) {return sdhci_acpi_cht () && - !strcmp (hid,"80860F14" ) && - !strcmp (uid,"2" ) && +acpi_dev_hid_uid_match (adev,"80860F14" ,"2" ) &&sdhci_acpi_cht_pci_wifi (0x14e4 ,0x43ec ,0 ,28 ); }@@ -345,8 +343,7 @@ static inline bool sdhci_acpi_byt_defer(struct device *dev)return false; } -static inline bool sdhci_acpi_no_fixup_child_power (const char *hid, -const char *uid) +static inline bool sdhci_acpi_no_fixup_child_power (struct acpi_device *adev) {return false; }@@ -375,19 +372,18 @@ static int bxt_get_cd(struct mmc_host *mmc)return ret; } -static int intel_probe_slot (struct platform_device *pdev,const char *hid, -const char *uid) +static int intel_probe_slot (struct platform_device *pdev,struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct intel_host *intel_host =sdhci_acpi_priv (c);struct sdhci_host *host = c->host; -if (hid && uid && !strcmp (hid,"80860F14" ) && !strcmp (uid,"1" ) && +if (acpi_dev_hid_uid_match (adev,"80860F14" ,"1" ) &&sdhci_readl (host,SDHCI_CAPABILITIES ) ==0x446cc8b2 &&sdhci_readl (host,SDHCI_CAPABILITIES_1 ) ==0x00000807 ) host->timeout_clk =1000 ;/* 1000 kHz i.e. 1 MHz */ -if (hid && !strcmp (hid,"80865ACA" )) +if (acpi_dev_hid_uid_match (adev,"80865ACA" ,NULL )) host->mmc_host_ops.get_cd = bxt_get_cd;intel_dsm_init (intel_host, &pdev->dev, host->mmc);@@ -473,8 +469,7 @@ static irqreturn_t sdhci_acpi_qcom_handler(int irq, void *ptr)return IRQ_HANDLED ; } -static int qcom_probe_slot (struct platform_device *pdev,const char *hid, -const char *uid) +static int qcom_probe_slot (struct platform_device *pdev,struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct sdhci_host *host = c->host;
drivers/mmc/host/sdhci-acpi.c static int qcom_probe_slot(struct platform_device *pdev, const char *hid, · line 480
Quoted 5 lines
drivers/mmc/host/sdhci-acpi.c +1
-1@@ -482,7 +477,7 @@ static int qcom_probe_slot(struct platform_device *pdev, const char *hid, *irq = -EINVAL ; -if (strcmp (hid,"QCOM8051" )) +if (acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))
Logic is inverted
Quoted 83 lines
drivers/mmc/host/sdhci-acpi.c +7
-19return 0 ; *irq =platform_get_irq (pdev,1 );@@ -501,14 +496,12 @@ static int qcom_free_slot(struct platform_device *pdev)struct sdhci_host *host = c->host;struct acpi_device *adev;int *irq =sdhci_acpi_priv (c); -const char *hid; adev =ACPI_COMPANION (dev);if (!adev)return -ENODEV ; - hid =acpi_device_hid (adev); -if (strcmp (hid,"QCOM8051" )) +if (!acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))return 0 ;if (*irq <0 )@@ -583,7 +576,7 @@ static const struct sdhci_acpi_chip sdhci_acpi_chip_amd = { };static int sdhci_acpi_emmc_amd_probe_slot (struct platform_device *pdev, -const char *hid,const char *uid) +struct acpi_device *adev) {struct sdhci_acpi_host *c =platform_get_drvdata (pdev);struct sdhci_host *host = c->host;@@ -654,17 +647,12 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { };MODULE_DEVICE_TABLE (acpi, sdhci_acpi_ids); -static const struct sdhci_acpi_slot *sdhci_acpi_get_slot (const char *hid, -const char *uid) +static const struct sdhci_acpi_slot *sdhci_acpi_get_slot (struct acpi_device *adev) {const struct sdhci_acpi_uid_slot *u;for (u = sdhci_acpi_uids; u->hid; u++) { -if (strcmp (u->hid, hid)) -continue ; -if (!u->uid) -return u->slot; -if (uid && !strcmp (u->uid, uid)) +if (acpi_dev_hid_uid_match (adev, u->hid, u->uid))return u->slot; }return NULL ;@@ -680,22 +668,17 @@ static int sdhci_acpi_probe(struct platform_device *pdev)struct resource *iomem;resource_size_t len;size_t priv_size; -const char *hid; -const char *uid;int err; device =ACPI_COMPANION (dev);if (!device)return -ENODEV ; - hid =acpi_device_hid (device); - uid =acpi_device_uid (device); - - slot =sdhci_acpi_get_slot (hid, uid); + slot =sdhci_acpi_get_slot (device);/* Power on the SDHCI controller and its children */ acpi_device_fix_up_power (device); -if (!sdhci_acpi_no_fixup_child_power (hid, uid)) { +if (!sdhci_acpi_no_fixup_child_power (device)) {list_for_each_entry (child, &device->children, node)if (child->status.present && child->status.enabled)acpi_device_fix_up_power (child);@@ -745,7 +728,7 @@ static int sdhci_acpi_probe(struct platform_device *pdev)if (c->slot) {if (c->slot->probe_slot) { - err = c->slot->probe_slot (pdev, hid, uid); + err = c->slot->probe_slot (pdev, device);if (err) goto err_free; }
Re: [PATCH v2 5/6] mmc: sdhci-acpi: Switch to use acpi_dev_hid_uid_match()
Quoted 7 lines · Adrian Hunter
drivers/mmc/host/sdhci-acpi.c static int qcom_probe_slot(struct platform_device *pdev, const char *hid, · line 480
Quoted 4 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
drivers/mmc/host/sdhci-acpi.c +1
-1-if (strcmp (hid,"QCOM8051" )) +if (acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))Logic is inverted
Good catch! I forgot to double check it here while below it's okay...
Quoted 2 lines
Quoted 2 lines
drivers/mmc/host/sdhci-acpi.c +1
-1-if (strcmp (hid,"QCOM8051" )) +if (!acpi_dev_hid_uid_match (adev,"QCOM8051" ,NULL ))
Signature · 2 lines
With Best Regards, Andy Shevchenko
PATCH v2 6/6 iommu/amd: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoSince we have a generic helper, drop custom implementation in the driver.
--- drivers/iommu/amd_iommu.c | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-)
drivers/iommu/amd_iommu.c +5 -25
@@ -125,30 +125,6 @@ static struct lock_class_key reserved_rbtree_key;* ****************************************************************************/ -static inline int match_hid_uid (struct device *dev, -struct acpihid_map_entry *entry) -{ -struct acpi_device *adev =ACPI_COMPANION (dev); -const char *hid, *uid; - -if (!adev) -return -ENODEV ; - - hid =acpi_device_hid (adev); - uid =acpi_device_uid (adev); - -if (!hid || !(*hid)) -return -ENODEV ; - -if (!uid || !(*uid)) -return strcmp (hid, entry->hid); - -if (!(*entry->uid)) -return strcmp (hid, entry->hid); - -return (strcmp (hid, entry->hid) ||strcmp (uid, entry->uid)); -} -static inline u16 get_pci_device_id (struct device *dev) {struct pci_dev *pdev =to_pci_dev (dev);
@@ -159,10 +135,14 @@ static inline u16 get_pci_device_id(struct device *dev)static inline int get_acpihid_device_id (struct device *dev,struct acpihid_map_entry **entry) { +struct acpi_device *adev =ACPI_COMPANION (dev);struct acpihid_map_entry *p; +if (!adev) +return -ENODEV ; +list_for_each_entry (p, &acpihid_map, list) { -if (!match_hid_uid (dev, p)) { +if (acpi_dev_hid_uid_match (adev, p->hid, p->uid)) {if (entry) *entry = p;return p->devid;
Signature · 1 line
2.23.0
Re: [PATCH v2 6/6] iommu/amd: Switch to use acpi_dev_hid_uid_match()
Quoted 3 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
Re: [PATCH v2 6/6] iommu/amd: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoQuoted 6 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
--- drivers/iommu/amd_iommu.c | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-)
Re: [PATCH v2 6/6] iommu/amd: Switch to use acpi_dev_hid_uid_match()
Quoted 9 lines · Joerg Roedel
Quoted 6 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
--- drivers/iommu/amd_iommu.c | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-)Acked-by Joerg Roedel <[email protected]>
Thanks!
There is v3 available, does it apply to it?
Signature · 2 lines
With Best Regards, Andy Shevchenko
Re: [PATCH v2 6/6] iommu/amd: Switch to use acpi_dev_hid_uid_match()
In reply to Andy ShevchenkoQuoted 4 lines · Andy Shevchenko
Since we have a generic helper, drop custom implementation in the driver.
---