From patchwork Mon Feb 8 17:35:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helmut Buchsbaum X-Patchwork-Id: 580440 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 258501402DE for ; Tue, 9 Feb 2016 04:36:28 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=XQtjb74Z; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754576AbcBHRgX (ORCPT ); Mon, 8 Feb 2016 12:36:23 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:36408 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753540AbcBHRfw (ORCPT ); Mon, 8 Feb 2016 12:35:52 -0500 Received: by mail-wm0-f67.google.com with SMTP id 128so16470584wmz.3 for ; Mon, 08 Feb 2016 09:35:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vWDjE+FOKzuNFvBI6i2bkGj2UuvU1q1kuhefm1pXE3k=; b=XQtjb74Zjeqqo/220elF4CkzsI6fb3ux7lSZnOglLTGIebP/eh3wjbKLTAKakCrQfT sqEPKYG05/ymSMg8LMDJFSdzpZJ4Krn+rdLaLGY/25smHsT/Ft42AVo/9Nm+zoNmF3JB yoeRDb+xT//5LB+9nEPCHGEuMXbbzqH0p45stWdsSkuWaeXlvt/UfsbPeg4RrBSXukqi S4bvhP2R2rSN+pldQzYliYmqKCg1I28ZA+8llMPC3os8M20kfKpceN66FI1ed0zDPad8 uY+7hok1ma501yDJyjrI5E+rPj86qcswSwVoIQtPKSHMdkFc/vV6KhHcQaRP8DOYtUab GmFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=vWDjE+FOKzuNFvBI6i2bkGj2UuvU1q1kuhefm1pXE3k=; b=b0HTCFeIlGbyHWHrmTZSc0dlD4MFC474/n+lMQdTnoNv4MNyI2aHxLyGj5mrEpGPYY nRHaJdIxiCD3TOtGd38VLivcUyJl8/18CfNSswGWlQ98Xt52I19/zloVpAOIZvLck9V8 nkBoy/GfHQeY+7KoIt4i7y1+JpO7ijetyXsk/rBG29D6p6gYq6Yypffhq6z8IsMljfW8 NhsIr5kxOMJByvYWCdnIfOKeEdHXoqUPc7CB+gjZSpVRIrsHgq5FechMld48+HJRWWlK rBerZUo7h+yW72HCzbLpKRyxzOlF40RzuqgJeKXJeHJEUaNN5oNYmPT3KtXJZ4HWai2i aMFg== X-Gm-Message-State: AG10YOTotcImPYzlDzSMFSlLvxmRJ/SLnbUe1YhIzPUHyVZwnTz0RYrHBh4E8L79E/szSg== X-Received: by 10.28.87.135 with SMTP id l129mr19644wmb.9.1454952950993; Mon, 08 Feb 2016 09:35:50 -0800 (PST) Received: from jessie64.at.festo.net ([213.208.155.113]) by smtp.gmail.com with ESMTPSA id gl10sm30767189wjb.30.2016.02.08.09.35.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 08 Feb 2016 09:35:50 -0800 (PST) From: Helmut Buchsbaum To: "David S. Miller" , Florian Fainelli , Andrew Lunn Cc: netdev@vger.kernel.org, Helmut Buchsbaum Subject: [PATCH v2 1/6] net: phy: spi_ks8995: introduce spi_device_id table Date: Mon, 8 Feb 2016 18:35:32 +0100 Message-Id: <1454952937-19428-2-git-send-email-helmut.buchsbaum@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1454952937-19428-1-git-send-email-helmut.buchsbaum@gmail.com> References: <1454952937-19428-1-git-send-email-helmut.buchsbaum@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Refactor to use spi_device_id table to facilitate easy extendability. Signed-off-by: Helmut Buchsbaum --- drivers/net/phy/spi_ks8995.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/spi_ks8995.c b/drivers/net/phy/spi_ks8995.c index f091d69..e848ad9 100644 --- a/drivers/net/phy/spi_ks8995.c +++ b/drivers/net/phy/spi_ks8995.c @@ -89,6 +89,28 @@ #define KS8995_RESET_DELAY 10 /* usec */ +enum ks8995_chip_variant { + ks8995, + ksz8864, + max_variant +}; + +struct ks8995_chip_params { + char *name; + int regs_size; +}; + +static const struct ks8995_chip_params ks8995_chip[] = { + [ks8995] = { + .name = "KS8995MA", + .regs_size = KS8995_REGS_SIZE, + }, + [ksz8864] = { + .name = "KSZ8864RMN", + .regs_size = KSZ8864_REGS_SIZE, + }, +}; + struct ks8995_pdata { /* not yet implemented */ }; @@ -98,8 +120,16 @@ struct ks8995_switch { struct mutex lock; struct ks8995_pdata *pdata; struct bin_attribute regs_attr; + const struct ks8995_chip_params *chip; }; +static const struct spi_device_id ks8995_id[] = { + {"ks8995", ks8995}, + {"ksz8864", ksz8864}, + { } +}; +MODULE_DEVICE_TABLE(spi, ks8995_id); + static inline u8 get_chip_id(u8 val) { return (val >> ID1_CHIPID_S) & ID1_CHIPID_M; @@ -244,17 +274,22 @@ static const struct bin_attribute ks8995_registers_attr = { }; /* ------------------------------------------------------------------------ */ - static int ks8995_probe(struct spi_device *spi) { struct ks8995_switch *ks; struct ks8995_pdata *pdata; u8 ids[2]; int err; + int variant = spi_get_device_id(spi)->driver_data; /* Chip description */ pdata = spi->dev.platform_data; + if (variant >= max_variant) { + dev_err(&spi->dev, "bad chip variant %d\n", variant); + return -ENODEV; + } + ks = devm_kzalloc(&spi->dev, sizeof(*ks), GFP_KERNEL); if (!ks) return -ENOMEM; @@ -262,6 +297,8 @@ static int ks8995_probe(struct spi_device *spi) mutex_init(&ks->lock); ks->pdata = pdata; ks->spi = spi_dev_get(spi); + ks->chip = &ks8995_chip[variant]; + spi_set_drvdata(spi, ks); spi->mode = SPI_MODE_0; @@ -287,6 +324,7 @@ static int ks8995_probe(struct spi_device *spi) return -ENODEV; } + ks->regs_attr.size = ks->chip->regs_size; memcpy(&ks->regs_attr, &ks8995_registers_attr, sizeof(ks->regs_attr)); if (get_chip_id(ids[1]) != CHIPID_M) { u8 val; @@ -303,7 +341,6 @@ static int ks8995_probe(struct spi_device *spi) dev_err(&spi->dev, "unknown chip:%02x,0\n", ids[1]); return err; } - ks->regs_attr.size = KSZ8864_REGS_SIZE; } err = ks8995_reset(ks); @@ -347,6 +384,7 @@ static struct spi_driver ks8995_driver = { }, .probe = ks8995_probe, .remove = ks8995_remove, + .id_table = ks8995_id, }; module_spi_driver(ks8995_driver);