Re: [PATCH 1/2 v2] mmc: omap_hsmmc: Kill off cover detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 24 September 2018 at 13:30, Linus Walleij <linus.walleij@xxxxxxxxxx> wrote:
> 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 <tony@xxxxxxxxxxx>
> Cc: linux-omap@xxxxxxxxxxxxxxx
> Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>

Applied for next, thanks!

Kind regards
Uffe

> ---
> 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(-)
>
> 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);
> --
> 2.17.1
>



[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux