From patchwork Sun Feb 7 22:39:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helmut Buchsbaum X-Patchwork-Id: 580101 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 1753A140325 for ; Mon, 8 Feb 2016 09:40:51 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=0rFRE1I8; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755020AbcBGWkL (ORCPT ); Sun, 7 Feb 2016 17:40:11 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34337 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754457AbcBGWj4 (ORCPT ); Sun, 7 Feb 2016 17:39:56 -0500 Received: by mail-wm0-f66.google.com with SMTP id p63so12861551wmp.1 for ; Sun, 07 Feb 2016 14:39:55 -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=0rFRE1I8+N/r+YX6sVoa2p5WTl1CyStiRZo3DeytNL7TP+zjMavFGznijcTnrsFK5Q lfCvlDMPeRx+KC7NX5X+rz1Jk7U2MUJZ1IlMO66tL8F0IUsUPuyIo5JIhZ7JjEsOoZLO o4CZ/GHsucCq0d/wPm+NX8PMThLXt9wj8XEm7PZbLN+yX9yzKCa0gIU0xcf0r5nqYjpD owE420QHyCtvcGkbi+L7zcNbdqpAm7o05C2GaGYFkYGseUhpBrBVgTD78I81n2ygbWka ipSXsHlb2LP3erbR8ZuTDwM5t7rMdOES2hXjbgn6rKkZrwex32vYva7hOXWTcpdz4d42 9Ncg== 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=Pi0Y3Vat7xiFtcnefLTu5x8D1Jhq3cWsjLcq2HNPPSo8JKMdsXU8AdRRWqdZlz4PdO pljAA/sfFJUTmY1/t5NvNtPoaM3fzAw9NIYllW4s9/MgUjGh28+FW8d3VGy36crCfMDS KJC/pYO1ohfMeKmhhiTDRorEnQt65gLiMVgYrJDgOoq+asqPOuPEIAiRmFh9fN8eaYQf Dlj4iJuPRe4jMahYzjLhUMLLuMbhbsG829Gl2pPdh2UZRpcnX8s/TCgC94F28sZNesef bbjTwWYgwZq62jVHdYksuqbYt+lwr0NgG8JVY/QXEO58/d2keKhyFJ9WkvO+yycukrIX OiPQ== X-Gm-Message-State: AG10YOQBlVRcBeTLqYA2YtpsshUTRUogvWwEQ5osvEwtiv8+deN0jsgz4L2LwlctbnFGHQ== X-Received: by 10.28.184.137 with SMTP id i131mr45467124wmf.96.1454884795263; Sun, 07 Feb 2016 14:39:55 -0800 (PST) Received: from jessie64.at.festo.net (178-191-150-217.adsl.highway.telekom.at. [178.191.150.217]) by smtp.gmail.com with ESMTPSA id x10sm26840106wjx.8.2016.02.07.14.39.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 07 Feb 2016 14:39:54 -0800 (PST) From: Helmut Buchsbaum To: "David S. Miller" Cc: Florian Fainelli , netdev@vger.kernel.org, Helmut Buchsbaum Subject: [PATCH 1/7] net: phy: spi_ks8995: introduce spi_device_id table Date: Sun, 7 Feb 2016 23:39:07 +0100 Message-Id: <1454884753-4560-2-git-send-email-helmut.buchsbaum@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1454884753-4560-1-git-send-email-helmut.buchsbaum@gmail.com> References: <1454884753-4560-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);