From patchwork Wed Jan 23 15:32:34 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guennadi Liakhovetski X-Patchwork-Id: 2025521 Return-Path: X-Original-To: patchwork-linux-mmc@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id B58A73FD86 for ; Wed, 23 Jan 2013 15:40:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755880Ab3AWPkX (ORCPT ); Wed, 23 Jan 2013 10:40:23 -0500 Received: from moutng.kundenserver.de ([212.227.17.8]:51561 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755893Ab3AWPkS (ORCPT ); Wed, 23 Jan 2013 10:40:18 -0500 Received: from axis700.grange (dslb-178-006-250-035.pools.arcor-ip.net [178.6.250.35]) by mrelayeu.kundenserver.de (node=mreu3) with ESMTP (Nemesis) id 0Llck0-1UXNFg1ir2-00ZMlD; Wed, 23 Jan 2013 16:40:17 +0100 Received: from 6a.grange (6a.grange [192.168.1.11]) by axis700.grange (Postfix) with ESMTPS id BC2F240BB8; Wed, 23 Jan 2013 16:40:14 +0100 (CET) Received: from lyakh by 6a.grange with local (Exim 4.72) (envelope-from ) id 1Ty2Qw-0000Ps-HD; Wed, 23 Jan 2013 16:40:14 +0100 From: Guennadi Liakhovetski To: linux-mmc@vger.kernel.org Cc: linux-sh@vger.kernel.org, Magnus Damm , Chris Ball , Guennadi Liakhovetski Subject: [PATCH v2 07/11] mmc: tmio-mmc: parse device-tree bindings Date: Wed, 23 Jan 2013 16:32:34 +0100 Message-Id: <1358955158-1510-8-git-send-email-g.liakhovetski@gmx.de> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1358955158-1510-1-git-send-email-g.liakhovetski@gmx.de> References: <1358955158-1510-1-git-send-email-g.liakhovetski@gmx.de> X-Provags-ID: V02:K0:9yZjbJ0YErDcKD2XN6VL0t4dDo4LvkheL/75+8aGiBi sD2I3Api/9KrLUvskbdm1Fi4Ss6axur64dDTiFmTeKL/d/dxD9 GZF+P0B+HDynSjm3+pXLeWSHZJyhRyK3XeavbKYF5GFwfaB/Sg kNSUctQ1VMAj58v6IOOHFoeyxgF2lGF9TNXkGEQcNaTpIk8XgZ fPLuMeKWkO0gI8httuWrGtpbCawELA1jcXY3uLxrunFazJFGND Vjrg2sfW6FBMTuBtUPCK5e+dZ7joHAvRHnth2eBGibA92I/BTF WE573RgrRcSLjW5L7PUeoiN0t6q4IXAoWB+T/fhLyPDIFTOFB1 HK7zr9+3ZfjzFUQv9Y2kdJ1Vj+S0oiMhecJZ/CgU4aE75eKdIs 574Xzpzo0om1g== Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org Add parsing of common and driver-specific DT bindings to the tmio-mmc MMC host driver. Signed-off-by: Guennadi Liakhovetski --- v2: check, if DT assigned a card-detect IRQ, in which case don't enable TMIO native CD IRQ. drivers/mmc/host/tmio_mmc_pio.c | 27 +++++++++++++++++++++++++-- 1 files changed, 25 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/tmio_mmc_pio.c b/drivers/mmc/host/tmio_mmc_pio.c index b25adb4..13729b6 100644 --- a/drivers/mmc/host/tmio_mmc_pio.c +++ b/drivers/mmc/host/tmio_mmc_pio.c @@ -918,6 +918,24 @@ static void tmio_mmc_init_ocr(struct tmio_mmc_host *host) dev_warn(mmc_dev(mmc), "Platform OCR mask is ignored\n"); } +static void tmio_mmc_of_parse(struct platform_device *pdev, + struct tmio_mmc_data *pdata) +{ + const struct device_node *np = pdev->dev.of_node; + if (!np) + return; + + if (of_get_property(np, "toshiba,mmc-wrprotect-disable", NULL)) + pdata->flags |= TMIO_MMC_WRPROTECT_DISABLE; + if (of_get_property(np, "toshiba,mmc-blksz-2bytes", NULL)) + pdata->flags |= TMIO_MMC_BLKSZ_2BYTES; + if (of_get_property(np, "toshiba,mmc-cap-sdio-irq", NULL) && + pdata->flags & TMIO_MMC_SDIO_IRQ) + pdata->capabilities |= MMC_CAP_SDIO_IRQ; + if (of_get_property(np, "toshiba,mmc-has-idle-wait", NULL)) + pdata->flags |= TMIO_MMC_HAS_IDLE_WAIT; +} + int tmio_mmc_host_probe(struct tmio_mmc_host **host, struct platform_device *pdev, struct tmio_mmc_data *pdata) @@ -928,6 +946,8 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host, int ret; u32 irq_mask = TMIO_MASK_CMD; + tmio_mmc_of_parse(pdev, pdata); + if (!(pdata->flags & TMIO_MMC_HAS_IDLE_WAIT)) pdata->write16_hook = NULL; @@ -939,6 +959,8 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host, if (!mmc) return -ENOMEM; + mmc_of_parse(mmc); + pdata->dev = &pdev->dev; _host = mmc_priv(mmc); _host->pdata = pdata; @@ -959,7 +981,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host, } mmc->ops = &tmio_mmc_ops; - mmc->caps = MMC_CAP_4_BIT_DATA | pdata->capabilities; + mmc->caps |= MMC_CAP_4_BIT_DATA | pdata->capabilities; mmc->caps2 = pdata->capabilities2; mmc->max_segs = 32; mmc->max_blk_size = 512; @@ -971,7 +993,8 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host, _host->native_hotplug = !(pdata->flags & TMIO_MMC_USE_GPIO_CD || mmc->caps & MMC_CAP_NEEDS_POLL || - mmc->caps & MMC_CAP_NONREMOVABLE); + mmc->caps & MMC_CAP_NONREMOVABLE || + mmc->slot.cd_irq >= 0); _host->power = false; pm_runtime_enable(&pdev->dev);