Skip to content

Commit

Permalink
mmc: au1xmmc: force non-modular build and remove symbol_get usage
Browse files Browse the repository at this point in the history
commit d4a5c59 upstream.

au1xmmc is split somewhat awkwardly into the main mmc subsystem driver,
and callbacks in platform_data that sit under arch/mips/ and are
always built in.  The latter than call mmc_detect_change through
symbol_get.  Remove the use of symbol_get by requiring the driver
to be built in.  In the future the interrupt handlers for card
insert/eject detection should probably be moved into the main driver,
and which point it can be built modular again.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Manuel Lauss <manuel.lauss@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
[mcgrof: squashed in depends on MMC=y suggested by Arnd]
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Christoph Hellwig authored and gregkh committed Sep 6, 2023
1 parent ac6fa0e commit 4dab89c
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 35 deletions.
8 changes: 1 addition & 7 deletions arch/mips/alchemy/devboards/db1000.c
Expand Up @@ -14,7 +14,6 @@
#include <linux/interrupt.h>
#include <linux/leds.h>
#include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/spi/spi.h>
Expand Down Expand Up @@ -167,12 +166,7 @@ static struct platform_device db1x00_audio_dev = {

static irqreturn_t db1100_mmc_cd(int irq, void *ptr)
{
void (*mmc_cd)(struct mmc_host *, unsigned long);
/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
mmc_cd(ptr, msecs_to_jiffies(500));
symbol_put(mmc_detect_change);

mmc_detect_change(ptr, msecs_to_jiffies(500));
return IRQ_HANDLED;
}

Expand Down
19 changes: 2 additions & 17 deletions arch/mips/alchemy/devboards/db1200.c
Expand Up @@ -10,7 +10,6 @@
#include <linux/gpio.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/leds.h>
Expand Down Expand Up @@ -340,14 +339,7 @@ static irqreturn_t db1200_mmc_cd(int irq, void *ptr)

static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr)
{
void (*mmc_cd)(struct mmc_host *, unsigned long);

/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
if (mmc_cd) {
mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
}
mmc_detect_change(ptr, msecs_to_jiffies(200));

msleep(100); /* debounce */
if (irq == DB1200_SD0_INSERT_INT)
Expand Down Expand Up @@ -431,14 +423,7 @@ static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr)

static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr)
{
void (*mmc_cd)(struct mmc_host *, unsigned long);

/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
if (mmc_cd) {
mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
}
mmc_detect_change(ptr, msecs_to_jiffies(200));

msleep(100); /* debounce */
if (irq == PB1200_SD1_INSERT_INT)
Expand Down
10 changes: 1 addition & 9 deletions arch/mips/alchemy/devboards/db1300.c
Expand Up @@ -17,7 +17,6 @@
#include <linux/interrupt.h>
#include <linux/ata_platform.h>
#include <linux/mmc/host.h>
#include <linux/module.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/platnand.h>
#include <linux/platform_device.h>
Expand Down Expand Up @@ -459,14 +458,7 @@ static irqreturn_t db1300_mmc_cd(int irq, void *ptr)

static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr)
{
void (*mmc_cd)(struct mmc_host *, unsigned long);

/* link against CONFIG_MMC=m. We can only be called once MMC core has
* initialized the controller, so symbol_get() should always succeed.
*/
mmc_cd = symbol_get(mmc_detect_change);
mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
mmc_detect_change(ptr, msecs_to_jiffies(200));

msleep(100); /* debounce */
if (irq == DB1300_SD1_INSERT_INT)
Expand Down
5 changes: 3 additions & 2 deletions drivers/mmc/host/Kconfig
Expand Up @@ -528,11 +528,12 @@ config MMC_ALCOR
of Alcor Micro PCI-E card reader

config MMC_AU1X
tristate "Alchemy AU1XX0 MMC Card Interface support"
bool "Alchemy AU1XX0 MMC Card Interface support"
depends on MIPS_ALCHEMY
depends on MMC=y
help
This selects the AMD Alchemy(R) Multimedia card interface.
If you have a Alchemy platform with a MMC slot, say Y or M here.
If you have a Alchemy platform with a MMC slot, say Y here.

If unsure, say N.

Expand Down

0 comments on commit 4dab89c

Please sign in to comment.