From patchwork Mon Sep 24 11:30:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 147345 Delivered-To: patch@linaro.org Received: by 2002:a2e:8595:0:0:0:0:0 with SMTP id b21-v6csp599043lji; Mon, 24 Sep 2018 04:31:01 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZex/+PH2MVrxRFOd3TfpMNEA8tmM2WgCFZaFzkxKIKRcOYkKIqRgSomkrfvyAs7LmtdMCe X-Received: by 2002:a62:4ec9:: with SMTP id c192-v6mr163316pfb.221.1537788661320; Mon, 24 Sep 2018 04:31:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537788661; cv=none; d=google.com; s=arc-20160816; b=LiAIGXsUi2ZYKYYunDozdTbn2ROnFV9jM4FNcPkpYVOMZIMwU93VEQSEtrTPTehAB6 JiLSfawvAFWOVNHdODKbPpc+UNA2vnIl/4RZbcGeIHqgY1haOYmiYyKXU712DZQIP8Vw Z4IIyiqA/scfXKOL6sIKZf2E3OpjMM9AMfocJ9h9mB4eOjdaeKSvyXx/ZbmWyvPqkkt5 Fycw29gt4dvN5hzZK5vjhibq9v9TSFZqIaqY8aQbsyE27Xd5bTd+puc2e0FgL/QcAhO9 RQ+Pw4b4vF+GlaxvnQaRGhScf/LKkv6mkcEsm59bUvpD9r5OqXrJeBW0eDANLNoVWvys wJlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=j6Yfitg5482EPGZRSKpXJlAodo8dMa4Pva1ZUi6C8Kk=; b=MlZ3UnlmZzRMR2XfDHc8+5RUj9/zQtaXDaDQurB1w5tbNLluuxw9rWQ+1dOiG2Fdx/ NYhINsOPFcUy8LMUXi/RBglJDs/qJ2RsRrrDjSo2fXpDpqYPypk4o60qu/xGg+FD32Zw TDnNyY1iWzWDzV25kIo2TRaPoKFV0kciw68gy5KExFxXxiYI1bJfL6iEyNOjsRSTRR9K IsRhGrLnHQ5DlgmQC3OU44luJ2OStdn65XXeRiLkt1HJDR5VgCc8u6lRtEXBdb2B4buK cUTykok8zy7aOv4dNa8oBWAbcXAN0mJMWl/6bzM82IfWooI+gkua1uTWf64fVi2Xnumi sfZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VY6IJVbC; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t1-v6si33205619pgg.643.2018.09.24.04.31.01; Mon, 24 Sep 2018 04:31:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VY6IJVbC; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727579AbeIXRch (ORCPT + 5 others); Mon, 24 Sep 2018 13:32:37 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:41748 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbeIXRch (ORCPT ); Mon, 24 Sep 2018 13:32:37 -0400 Received: by mail-lj1-f194.google.com with SMTP id y17-v6so17853367ljy.8 for ; Mon, 24 Sep 2018 04:30:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=j6Yfitg5482EPGZRSKpXJlAodo8dMa4Pva1ZUi6C8Kk=; b=VY6IJVbCsoh1Qanwvs72OmHgnOGJVC5+iS4VPymv6zYhXym9lvMd/E2s5abGTuv1m3 8lJvlWy3QXGmerw0qINz57Xp1AtGkYK9tYhlCBFhRu/5obF33zPcOtG3MsWHI4mtt8St QUEvWhgWWR62/dlskpaI5Hy6OZ9Zyb8Cwoxwg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=j6Yfitg5482EPGZRSKpXJlAodo8dMa4Pva1ZUi6C8Kk=; b=oEAjYb/pRsAaCy2RCxVvl1j9hblOvt9MlnnBmjX/4RXP70SKQFyxOmkPS6cEo/Ltr9 ozQOlZkPLZUQ58mQHHBF/P9K3iUVarUBQcGbYZ0JvgSfdQX6Bbizi0NArIF3GAr7cBhJ SwwiTfcLyj/fzB+Pm422k+8mXcVE+qMeohPGdhwR6j/90nTNnWCxP1Ca3hTLSPtTy0Hp DSM/YG8Pnk8qhpSvErzj4xwf8B45ZipxM+6lZZqkTfm/OB7d49Jt83kH+kVB0CvemUwh wQjSA2M7k6y6SOShCzojiLRUDalNZs5fduU83dZDfU27vaCkz9iQaxZjzDDHlgHqUMjq r8VA== X-Gm-Message-State: APzg51DvfhJyqDCSp/XOkijnoB0nSYRcHA6zyGLQufich4qBBzaxC7Rr 06MTda/biSniuHUFYZ/wXtH4/Petwd8= X-Received: by 2002:a2e:98c2:: with SMTP id s2-v6mr3962730ljj.20.1537788657158; Mon, 24 Sep 2018 04:30:57 -0700 (PDT) Received: from genomnajs.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id 24-v6sm6595946ljb.76.2018.09.24.04.30.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 24 Sep 2018 04:30:55 -0700 (PDT) From: Linus Walleij To: linux-mmc@vger.kernel.org, Ulf Hansson Cc: Linus Walleij , Tony Lindgren , linux-omap@vger.kernel.org Subject: [PATCH 1/2 v2] mmc: omap_hsmmc: Kill off cover detection Date: Mon, 24 Sep 2018 13:30:50 +0200 Message-Id: <20180924113051.8699-1-linus.walleij@linaro.org> X-Mailer: git-send-email 2.17.1 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org Cover detection appears to be a feature protecting the SD card on mobile phones with a slide-cover, such as some Nokia phones. The idea seems to be to not allow access to the SD card when the cover is open. It is only usable with platform data from board files, but no board file in the kernel is using it, yet it takes up a sizeable chunk of code in the OMAP HSMMC driver. Since we do not add new board files for the OMAPs any target that need this should anyway reimplement it properly using the device tree, so delete this legacy code. The driver is marked as orphan in MAINTAINERS by the way. Cc: Tony Lindgren Cc: linux-omap@vger.kernel.org Signed-off-by: Linus Walleij --- ChangeLog v1->v2: - Remove a stray function call. --- drivers/mmc/host/omap_hsmmc.c | 121 +---------------------- include/linux/platform_data/hsmmc-omap.h | 1 - 2 files changed, 2 insertions(+), 120 deletions(-) -- 2.17.1 diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 071693ebfe18..3b38d2a592c2 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -198,7 +198,6 @@ struct omap_hsmmc_host { struct dma_chan *rx_chan; int response_busy; int context_loss; - int protect_card; int reqs_blocked; int req_in_progress; unsigned long clk_rate; @@ -207,15 +206,6 @@ struct omap_hsmmc_host { #define HSMMC_SDIO_IRQ_ENABLED (1 << 1) /* SDIO irq enabled */ struct omap_hsmmc_next next_data; struct omap_hsmmc_platform_data *pdata; - - /* return MMC cover switch state, can be NULL if not supported. - * - * possible return values: - * 0 - closed - * 1 - open - */ - int (*get_cover_state)(struct device *dev); - int (*card_detect)(struct device *dev); }; @@ -233,13 +223,6 @@ static int omap_hsmmc_card_detect(struct device *dev) return mmc_gpio_get_cd(host->mmc); } -static int omap_hsmmc_get_cover_state(struct device *dev) -{ - struct omap_hsmmc_host *host = dev_get_drvdata(dev); - - return mmc_gpio_get_cd(host->mmc); -} - static int omap_hsmmc_enable_supply(struct mmc_host *mmc) { int ret; @@ -484,22 +467,13 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) return 0; } -static irqreturn_t omap_hsmmc_cover_irq(int irq, void *dev_id); - static int omap_hsmmc_gpio_init(struct mmc_host *mmc, struct omap_hsmmc_host *host, struct omap_hsmmc_platform_data *pdata) { int ret; - if (gpio_is_valid(pdata->gpio_cod)) { - ret = mmc_gpio_request_cd(mmc, pdata->gpio_cod, 0); - if (ret) - return ret; - - host->get_cover_state = omap_hsmmc_get_cover_state; - mmc_gpio_set_cd_isr(mmc, omap_hsmmc_cover_irq); - } else if (gpio_is_valid(pdata->gpio_cd)) { + if (gpio_is_valid(pdata->gpio_cd)) { ret = mmc_gpio_request_cd(mmc, pdata->gpio_cd, 0); if (ret) return ret; @@ -781,9 +755,6 @@ static void send_init_stream(struct omap_hsmmc_host *host) int reg = 0; unsigned long timeout; - if (host->protect_card) - return; - disable_irq(host->irq); OMAP_HSMMC_WRITE(host->base, IE, INT_EN_MASK); @@ -804,29 +775,6 @@ static void send_init_stream(struct omap_hsmmc_host *host) enable_irq(host->irq); } -static inline -int omap_hsmmc_cover_is_closed(struct omap_hsmmc_host *host) -{ - int r = 1; - - if (host->get_cover_state) - r = host->get_cover_state(host->dev); - return r; -} - -static ssize_t -omap_hsmmc_show_cover_switch(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct mmc_host *mmc = container_of(dev, struct mmc_host, class_dev); - struct omap_hsmmc_host *host = mmc_priv(mmc); - - return sprintf(buf, "%s\n", - omap_hsmmc_cover_is_closed(host) ? "closed" : "open"); -} - -static DEVICE_ATTR(cover_switch, S_IRUGO, omap_hsmmc_show_cover_switch, NULL); - static ssize_t omap_hsmmc_show_slot_name(struct device *dev, struct device_attribute *attr, char *buf) @@ -1247,44 +1195,6 @@ static int omap_hsmmc_switch_opcond(struct omap_hsmmc_host *host, int vdd) return ret; } -/* Protect the card while the cover is open */ -static void omap_hsmmc_protect_card(struct omap_hsmmc_host *host) -{ - if (!host->get_cover_state) - return; - - host->reqs_blocked = 0; - if (host->get_cover_state(host->dev)) { - if (host->protect_card) { - dev_info(host->dev, "%s: cover is closed, " - "card is now accessible\n", - mmc_hostname(host->mmc)); - host->protect_card = 0; - } - } else { - if (!host->protect_card) { - dev_info(host->dev, "%s: cover is open, " - "card is now inaccessible\n", - mmc_hostname(host->mmc)); - host->protect_card = 1; - } - } -} - -/* - * irq handler when (cell-phone) cover is mounted/removed - */ -static irqreturn_t omap_hsmmc_cover_irq(int irq, void *dev_id) -{ - struct omap_hsmmc_host *host = dev_id; - - sysfs_notify(&host->mmc->class_dev.kobj, NULL, "cover_switch"); - - omap_hsmmc_protect_card(host); - mmc_detect_change(host->mmc, (HZ * 200) / 1000); - return IRQ_HANDLED; -} - static void omap_hsmmc_dma_callback(void *param) { struct omap_hsmmc_host *host = param; @@ -1555,24 +1465,7 @@ static void omap_hsmmc_request(struct mmc_host *mmc, struct mmc_request *req) BUG_ON(host->req_in_progress); BUG_ON(host->dma_ch != -1); - if (host->protect_card) { - if (host->reqs_blocked < 3) { - /* - * Ensure the controller is left in a consistent - * state by resetting the command and data state - * machines. - */ - omap_hsmmc_reset_controller_fsm(host, SRD); - omap_hsmmc_reset_controller_fsm(host, SRC); - host->reqs_blocked += 1; - } - req->cmd->error = -EBADF; - if (req->data) - req->data->error = -EBADF; - req->cmd->retries = 0; - mmc_request_done(mmc, req); - return; - } else if (host->reqs_blocked) + if (host->reqs_blocked) host->reqs_blocked = 0; WARN_ON(host->mrq != NULL); host->mrq = req; @@ -1921,7 +1814,6 @@ static struct omap_hsmmc_platform_data *of_get_hsmmc_pdata(struct device *dev) pdata->controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT; pdata->gpio_cd = -EINVAL; - pdata->gpio_cod = -EINVAL; pdata->gpio_wp = -EINVAL; if (of_find_property(np, "ti,non-removable", NULL)) { @@ -2125,8 +2017,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) if (!ret) mmc->caps |= MMC_CAP_SDIO_IRQ; - omap_hsmmc_protect_card(host); - mmc_add_host(mmc); if (mmc_pdata(host)->name != NULL) { @@ -2134,12 +2024,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) if (ret < 0) goto err_slot_name; } - if (host->get_cover_state) { - ret = device_create_file(&mmc->class_dev, - &dev_attr_cover_switch); - if (ret < 0) - goto err_slot_name; - } omap_hsmmc_debugfs(mmc); pm_runtime_mark_last_busy(host->dev); @@ -2230,7 +2114,6 @@ static int omap_hsmmc_resume(struct device *dev) if (!(host->mmc->pm_flags & MMC_PM_KEEP_POWER)) omap_hsmmc_conf_bus_power(host); - omap_hsmmc_protect_card(host); pm_runtime_mark_last_busy(host->dev); pm_runtime_put_autosuspend(host->dev); return 0; diff --git a/include/linux/platform_data/hsmmc-omap.h b/include/linux/platform_data/hsmmc-omap.h index 73d9098ada2d..c055d7eda085 100644 --- a/include/linux/platform_data/hsmmc-omap.h +++ b/include/linux/platform_data/hsmmc-omap.h @@ -71,7 +71,6 @@ struct omap_hsmmc_platform_data { char *version; int gpio_cd; /* gpio (card detect) */ - int gpio_cod; /* gpio (cover detect) */ int gpio_wp; /* gpio (write protect) */ /* if we have special card, init it using this callback */ void (*init_card)(struct mmc_card *card); From patchwork Mon Sep 24 11:30:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 147346 Delivered-To: patch@linaro.org Received: by 2002:a2e:8595:0:0:0:0:0 with SMTP id b21-v6csp599082lji; Mon, 24 Sep 2018 04:31:04 -0700 (PDT) X-Google-Smtp-Source: ACcGV61Fqv0sRaWjzd6Zd8ukKprU61n03XoWchqM5SixDbNkpzyrvkM4p9HTMtNojlKZ5x5lo28y X-Received: by 2002:a63:de4b:: with SMTP id y11-v6mr9133071pgi.435.1537788663844; Mon, 24 Sep 2018 04:31:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537788663; cv=none; d=google.com; s=arc-20160816; b=iM4OJoV3uF1B/mCMgwhtdDPq78ct1D98n5lYvCJghhJOYTG2eT4CO4bH68GSdWUb9D V5ftI5fJO9t9ovj27p2Pn4f6nqf/MBwT+2HbmLEF577Zw4PCtsCtmHxU/B1N+ZdHeFEK 7hIchu6udgk64xQIofVNa4ln1pyfF8esKnNPnhxRQQfJh2E1DWGc9FItwSCDyFoTr5du M2ZlkL0JNPMZb33aIhNmAQ7pkPlbkgqrroZmzqBDv3gCkNueKzQ9ItbUfH916U8HaXmV hwC4x9U9viwYsqmo2DW3kxT+X9hp53PUzMSK9x/1006DwEIzR/OJDOiiMQVrOeAfSRxX XOcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=L1rlz8INr02++8SHE7fiFyUJQhfS8hi430oJUpZfjck=; b=dJRCumvhyn7Vl+K1pTSRvW8HlzTZxc1lLtj2oI6xQ4oN9PR1GjHvCVJIdIgty3T3rf XKWmD45KuxXthMTH/IgW9F990R/5uoCtz4geimiIpw1M2iIJ5Fb38q1mP3Q1P2KDSRN8 KDQTUXUDRXrcjHIwdREYWib6cUsE3xEUW0Xvfp39ELr7ZdDvEL2txxr5DmDFwJzQsypP ZaYZYtQPZhQCoUImE7zKUZIZFNngn/+eld0H/2nsUK42TIMM/1ZS6RGkfj8NKNiw2tEy 3097XE+CjqGBUssNhts5B4/FKuHNZZWO6QZOda0P1xa3YvF5/bD1xJZVTQINOk/XJApG BBmg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=duQMYMIV; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w9-v6si36283777pfg.234.2018.09.24.04.31.03; Mon, 24 Sep 2018 04:31:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=duQMYMIV; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727524AbeIXRcj (ORCPT + 5 others); Mon, 24 Sep 2018 13:32:39 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:44661 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725982AbeIXRcj (ORCPT ); Mon, 24 Sep 2018 13:32:39 -0400 Received: by mail-lj1-f194.google.com with SMTP id q127-v6so17862999ljq.11 for ; Mon, 24 Sep 2018 04:31:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=L1rlz8INr02++8SHE7fiFyUJQhfS8hi430oJUpZfjck=; b=duQMYMIV5yG7XGD50ZecEFvzzudlJGHaQsIHyy4mcmaAE0u1Up/VKaSe3Gzy3+Hvli +2EM9tALcHf09++/DurjNawc6XJv3oyL9ocM9Tf3mcc12HznxdSeT8kai+WgHUXIyYzA XsaBER7Yt1kOxglsLL1L/kNL5FPmXkTkBeGiw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=L1rlz8INr02++8SHE7fiFyUJQhfS8hi430oJUpZfjck=; b=O/w9VMzGQIieej/wPc413qLkvWqXrjXumrJd3OZxQQKEy9JmqUoURXOZf9Vrhp78eg w76uPoUAsDfsJnduWsFuuEMqfvmRoqbc/2Dmfo+nXwqlWAju8sYsMmKkqYtTJjNMBWwU 5pFi8Q/ZAY8bW7B3M0H4X+VzPK/i/U9bogtMY7hDqGsRo05x48gLCCqKZ3x9XSjQ3FBG z0iAirGrThLEHeIN0fxboxbQnUPA9T8mGKMMDf1UFWnIyf1UpSCEl5G1HfaSs2S0enlp EYKduJkKAYjPzw5bZfvmFkxIfudTdCy1oTKeRxnaqnQozyOh5RTlHWdWvrhZGF7KxQQ6 ermQ== X-Gm-Message-State: ABuFfog9KjTXKpYElOkBSwCaTU6ZiqQvrMcqNk285zH/DrmNjI+NBdYs snICRGQHgVSdDh5f7M6omCDzPQ== X-Received: by 2002:a2e:8146:: with SMTP id t6-v6mr1609660ljg.32.1537788659774; Mon, 24 Sep 2018 04:30:59 -0700 (PDT) Received: from genomnajs.ideon.se ([85.235.10.227]) by smtp.gmail.com with ESMTPSA id 24-v6sm6595946ljb.76.2018.09.24.04.30.58 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 24 Sep 2018 04:30:58 -0700 (PDT) From: Linus Walleij To: linux-mmc@vger.kernel.org, Ulf Hansson Cc: Linus Walleij , Tony Lindgren , linux-omap@vger.kernel.org Subject: [PATCH 2/2 v2] mmc: omap_hsmmc: Delete platform data GPIO CD and WP Date: Mon, 24 Sep 2018 13:30:51 +0200 Message-Id: <20180924113051.8699-2-linus.walleij@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180924113051.8699-1-linus.walleij@linaro.org> References: <20180924113051.8699-1-linus.walleij@linaro.org> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org The OMAP HSMMC driver has some elaborate and hairy handling for passing GPIO card detect and write protect lines from a boardfile into the driver: the machine defines a struct omap2_hsmmc_info that is copied into struct omap_hsmmc_platform_data by omap_hsmmc_pdata_init() in arch/arm/mach-omap2/hsmmc.c. However the .gpio_cd and .gpio_wp fields are not copied from omap2_hsmmc_info to omap_hsmmc_platform_data by omap_hsmmc_pdata_init() so they remain unused. The only platform defining omap2_hsmmc_info also define both to -1, unused. It turn out there are no boardfiles passing any valid GPIO lines into the OMAP HSMMC driver at all. And since we are not going to add any more OMAP2 boardfiles, we can delete this card detect and write protect handling altogether. This seems to also fix a bug: the card detect callback mmc_gpio_get_cd() in the slot GPIO core needs to be called by drivers utilizing slot GPIO. It appears the the boardfile quirks were not doing this right, so this would only get called for boardfiles, i.e. since no boardfile was using it, never. Just assign mmc_gpio_get_cd() unconditionally to omap_hsmmc_ops .get_cd() so card detects from the device tree works. AFAICT card detect with GPIO lines assigned from mmc_of_parse() are not working at the moment, but that is no regression since it probably never worked. Cc: Tony Lindgren Cc: linux-omap@vger.kernel.org Signed-off-by: Linus Walleij --- ChangeLog v1->v2: - New patch after discovering that the whole card detect and write protect logic was unused. --- arch/arm/mach-omap2/hsmmc.h | 2 - arch/arm/mach-omap2/pdata-quirks.c | 2 - drivers/mmc/host/omap_hsmmc.c | 52 +----------------------- include/linux/platform_data/hsmmc-omap.h | 2 - 4 files changed, 1 insertion(+), 57 deletions(-) -- 2.17.1 diff --git a/arch/arm/mach-omap2/hsmmc.h b/arch/arm/mach-omap2/hsmmc.h index af9af5094ec3..bf99aec5a155 100644 --- a/arch/arm/mach-omap2/hsmmc.h +++ b/arch/arm/mach-omap2/hsmmc.h @@ -12,8 +12,6 @@ struct omap2_hsmmc_info { u8 mmc; /* controller 1/2/3 */ u32 caps; /* 4/8 wires and any additional host * capabilities OR'd (ref. linux/mmc/host.h) */ - int gpio_cd; /* or -EINVAL */ - int gpio_wp; /* or -EINVAL */ struct platform_device *pdev; /* mmc controller instance */ /* init some special card */ void (*init_card)(struct mmc_card *card); diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index 7f02743edbe4..fe7c1fdb51d8 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c @@ -363,8 +363,6 @@ static struct omap2_hsmmc_info pandora_mmc3[] = { { .mmc = 3, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, - .gpio_cd = -EINVAL, - .gpio_wp = -EINVAL, .init_card = pandora_wl1251_init_card, }, {} /* Terminator */ diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 3b38d2a592c2..1b57e23263e9 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -38,7 +37,6 @@ #include #include #include -#include #include #include #include @@ -206,7 +204,6 @@ struct omap_hsmmc_host { #define HSMMC_SDIO_IRQ_ENABLED (1 << 1) /* SDIO irq enabled */ struct omap_hsmmc_next next_data; struct omap_hsmmc_platform_data *pdata; - int (*card_detect)(struct device *dev); }; struct omap_mmc_of_data { @@ -216,13 +213,6 @@ struct omap_mmc_of_data { static void omap_hsmmc_start_dma_transfer(struct omap_hsmmc_host *host); -static int omap_hsmmc_card_detect(struct device *dev) -{ - struct omap_hsmmc_host *host = dev_get_drvdata(dev); - - return mmc_gpio_get_cd(host->mmc); -} - static int omap_hsmmc_enable_supply(struct mmc_host *mmc) { int ret; @@ -467,29 +457,6 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) return 0; } -static int omap_hsmmc_gpio_init(struct mmc_host *mmc, - struct omap_hsmmc_host *host, - struct omap_hsmmc_platform_data *pdata) -{ - int ret; - - if (gpio_is_valid(pdata->gpio_cd)) { - ret = mmc_gpio_request_cd(mmc, pdata->gpio_cd, 0); - if (ret) - return ret; - - host->card_detect = omap_hsmmc_card_detect; - } - - if (gpio_is_valid(pdata->gpio_wp)) { - ret = mmc_gpio_request_ro(mmc, pdata->gpio_wp); - if (ret) - return ret; - } - - return 0; -} - /* * Start clock to the card */ @@ -1539,15 +1506,6 @@ static void omap_hsmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) omap_hsmmc_set_bus_mode(host); } -static int omap_hsmmc_get_cd(struct mmc_host *mmc) -{ - struct omap_hsmmc_host *host = mmc_priv(mmc); - - if (!host->card_detect) - return -ENOSYS; - return host->card_detect(host->dev); -} - static void omap_hsmmc_init_card(struct mmc_host *mmc, struct mmc_card *card) { struct omap_hsmmc_host *host = mmc_priv(mmc); @@ -1686,7 +1644,7 @@ static struct mmc_host_ops omap_hsmmc_ops = { .pre_req = omap_hsmmc_pre_req, .request = omap_hsmmc_request, .set_ios = omap_hsmmc_set_ios, - .get_cd = omap_hsmmc_get_cd, + .get_cd = mmc_gpio_get_cd, .get_ro = mmc_gpio_get_ro, .init_card = omap_hsmmc_init_card, .enable_sdio_irq = omap_hsmmc_enable_sdio_irq, @@ -1813,9 +1771,6 @@ static struct omap_hsmmc_platform_data *of_get_hsmmc_pdata(struct device *dev) if (of_find_property(np, "ti,dual-volt", NULL)) pdata->controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT; - pdata->gpio_cd = -EINVAL; - pdata->gpio_wp = -EINVAL; - if (of_find_property(np, "ti,non-removable", NULL)) { pdata->nonremovable = true; pdata->no_regulator_off_init = true; @@ -1900,10 +1855,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) host->pbias_enabled = 0; host->vqmmc_enabled = 0; - ret = omap_hsmmc_gpio_init(mmc, host, pdata); - if (ret) - goto err_gpio; - platform_set_drvdata(pdev, host); if (pdev->dev.of_node) @@ -2045,7 +1996,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev) if (host->dbclk) clk_disable_unprepare(host->dbclk); err1: -err_gpio: mmc_free_host(mmc); err: return ret; diff --git a/include/linux/platform_data/hsmmc-omap.h b/include/linux/platform_data/hsmmc-omap.h index c055d7eda085..85da11916bd5 100644 --- a/include/linux/platform_data/hsmmc-omap.h +++ b/include/linux/platform_data/hsmmc-omap.h @@ -70,8 +70,6 @@ struct omap_hsmmc_platform_data { /* string specifying a particular variant of hardware */ char *version; - int gpio_cd; /* gpio (card detect) */ - int gpio_wp; /* gpio (write protect) */ /* if we have special card, init it using this callback */ void (*init_card)(struct mmc_card *card);