From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932144AbbFOTAo (ORCPT ); Mon, 15 Jun 2015 15:00:44 -0400 Received: from mga03.intel.com ([134.134.136.65]:44173 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755972AbbFOS6N (ORCPT ); Mon, 15 Jun 2015 14:58:13 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,620,1427785200"; d="scan'208";a="747125462" From: Tomas Winkler To: gregkh@linuxfoundation.org Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, Tomas Winkler Subject: [char-misc-next 07/15 V2] mei: bus: revamp device matching Date: Mon, 15 Jun 2015 21:56:47 +0300 Message-Id: <1434394615-3754-8-git-send-email-tomas.winkler@intel.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1434394615-3754-1-git-send-email-tomas.winkler@intel.com> References: <1434394615-3754-1-git-send-email-tomas.winkler@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org mei_cl_device_match now calls mei_cl_device_find that returns the matching device id in the device id table. We will utilize the mei_cl_device_find during probing to locate the matching entry. Signed-off-by: Tomas Winkler --- V2: fix the commit message drivers/misc/mei/bus.c | 63 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c index e32913289c87..7a40486d1c4f 100644 --- a/drivers/misc/mei/bus.c +++ b/drivers/misc/mei/bus.c @@ -384,39 +384,64 @@ out: } EXPORT_SYMBOL_GPL(mei_cl_disable_device); -static int mei_cl_device_match(struct device *dev, struct device_driver *drv) +/** + * mei_cl_device_find - find matching entry in the driver id table + * + * @cldev: me client device + * @cldrv: me client driver + * + * Return: id on success; NULL if no id is matching + */ +static const +struct mei_cl_device_id *mei_cl_device_find(struct mei_cl_device *cldev, + struct mei_cl_driver *cldrv) { - struct mei_cl_device *cldev = to_mei_cl_device(dev); - struct mei_cl_driver *cldrv = to_mei_cl_driver(drv); const struct mei_cl_device_id *id; const uuid_le *uuid; - const char *name; - - if (!cldev) - return 0; uuid = mei_me_cl_uuid(cldev->me_cl); - name = cldev->name; - - if (!cldrv || !cldrv->id_table) - return 0; id = cldrv->id_table; - while (uuid_le_cmp(NULL_UUID_LE, id->uuid)) { - if (!uuid_le_cmp(*uuid, id->uuid)) { - if (id->name[0]) { - if (!strncmp(name, id->name, sizeof(id->name))) - return 1; - } else { - return 1; - } + + if (!cldev->name[0]) + return id; + + if (!strncmp(cldev->name, id->name, sizeof(id->name))) + return id; } id++; } + return NULL; +} + +/** + * mei_cl_device_match - device match function + * + * @dev: device + * @drv: driver + * + * Return: 1 if matching device was found 0 otherwise + */ +static int mei_cl_device_match(struct device *dev, struct device_driver *drv) +{ + struct mei_cl_device *cldev = to_mei_cl_device(dev); + struct mei_cl_driver *cldrv = to_mei_cl_driver(drv); + const struct mei_cl_device_id *found_id; + + if (!cldev) + return 0; + + if (!cldrv || !cldrv->id_table) + return 0; + + found_id = mei_cl_device_find(cldev, cldrv); + if (found_id) + return 1; + return 0; } -- 2.4.3