mmc: slot-gpio: Allocate GPIO labels dynamically
The use of string pointers in the MMC slot GPIO context is pretty dubious, allocating some 2*len extra bytes for each label of the ro and wp pins. Tidy this up using kasprintf() with dynamic allocation of labels for these strings. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
21f1e2d457
commit
ec5af091b2
@ -27,8 +27,8 @@ struct mmc_gpio {
|
|||||||
bool override_cd_active_level;
|
bool override_cd_active_level;
|
||||||
irqreturn_t (*cd_gpio_isr)(int irq, void *dev_id);
|
irqreturn_t (*cd_gpio_isr)(int irq, void *dev_id);
|
||||||
char *ro_label;
|
char *ro_label;
|
||||||
|
char *cd_label;
|
||||||
u32 cd_debounce_delay_ms;
|
u32 cd_debounce_delay_ms;
|
||||||
char cd_label[];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
|
static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
|
||||||
@ -45,15 +45,19 @@ static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
|
|||||||
|
|
||||||
int mmc_gpio_alloc(struct mmc_host *host)
|
int mmc_gpio_alloc(struct mmc_host *host)
|
||||||
{
|
{
|
||||||
size_t len = strlen(dev_name(host->parent)) + 4;
|
|
||||||
struct mmc_gpio *ctx = devm_kzalloc(host->parent,
|
struct mmc_gpio *ctx = devm_kzalloc(host->parent,
|
||||||
sizeof(*ctx) + 2 * len, GFP_KERNEL);
|
sizeof(*ctx), GFP_KERNEL);
|
||||||
|
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
ctx->ro_label = ctx->cd_label + len;
|
|
||||||
ctx->cd_debounce_delay_ms = 200;
|
ctx->cd_debounce_delay_ms = 200;
|
||||||
snprintf(ctx->cd_label, len, "%s cd", dev_name(host->parent));
|
ctx->cd_label = devm_kasprintf(host->parent, GFP_KERNEL,
|
||||||
snprintf(ctx->ro_label, len, "%s ro", dev_name(host->parent));
|
"%s cd", dev_name(host->parent));
|
||||||
|
if (!ctx->cd_label)
|
||||||
|
return -ENOMEM;
|
||||||
|
ctx->ro_label = devm_kasprintf(host->parent, GFP_KERNEL,
|
||||||
|
"%s ro", dev_name(host->parent));
|
||||||
|
if (!ctx->ro_label)
|
||||||
|
return -ENOMEM;
|
||||||
host->slot.handler_priv = ctx;
|
host->slot.handler_priv = ctx;
|
||||||
host->slot.cd_irq = -EINVAL;
|
host->slot.cd_irq = -EINVAL;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user