Commit 65f095b2 authored by Andy Shevchenko's avatar Andy Shevchenko
Browse files

auxdisplay: hd44780: Call charlcd_alloc() from hd44780_common_alloc()



HD44780 APIs all operate on struct charlcd objects. Moreover, the current users
always call charlcd_alloc() and hd44780_common_alloc(). Make the latter call
the former, so eliminate the additional allocation, to make it consistent with
the rest of API and avoid duplication.

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent 664d2179
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -222,20 +222,17 @@ static int hd44780_probe(struct platform_device *pdev)
		return -EINVAL;
	}

	hdc = hd44780_common_alloc();
	if (!hdc)
		return -ENOMEM;

	lcd = charlcd_alloc(0);
	lcd = hd44780_common_alloc();
	if (!lcd)
		goto fail1;
		return -ENOMEM;

	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
	if (!hd)
		goto fail2;

	hdc = lcd->drvdata;
	hdc->hd44780 = hd;
	lcd->drvdata = hdc;

	for (i = 0; i < ifwidth; i++) {
		hd->pins[base + i] = devm_gpiod_get_index(dev, "data", i,
							  GPIOD_OUT_LOW);
@@ -313,9 +310,7 @@ static int hd44780_probe(struct platform_device *pdev)
fail3:
	kfree(hd);
fail2:
	charlcd_free(lcd);
fail1:
	hd44780_common_free(hdc);
	hd44780_common_free(lcd);
	return ret;
}

@@ -326,8 +321,7 @@ static void hd44780_remove(struct platform_device *pdev)

	charlcd_unregister(lcd);
	kfree(hdc->hd44780);
	hd44780_common_free(hdc);
	charlcd_free(lcd);
	hd44780_common_free(lcd);
}

static const struct of_device_id hd44780_of_match[] = {
+8 −6
Original line number Diff line number Diff line
@@ -351,24 +351,26 @@ int hd44780_common_redefine_char(struct charlcd *lcd, char *esc)
}
EXPORT_SYMBOL_GPL(hd44780_common_redefine_char);

struct hd44780_common *hd44780_common_alloc(void)
struct charlcd *hd44780_common_alloc(void)
{
	struct hd44780_common *hd;
	struct charlcd *lcd;

	hd = kzalloc(sizeof(*hd), GFP_KERNEL);
	if (!hd)
	lcd = charlcd_alloc(sizeof(*hd));
	if (!lcd)
		return NULL;

	hd = lcd->drvdata;
	hd->ifwidth = 8;
	hd->bwidth = DEFAULT_LCD_BWIDTH;
	hd->hwidth = DEFAULT_LCD_HWIDTH;
	return hd;
	return lcd;
}
EXPORT_SYMBOL_GPL(hd44780_common_alloc);

void hd44780_common_free(struct hd44780_common *hd)
void hd44780_common_free(struct charlcd *lcd)
{
	kfree(hd);
	charlcd_free(lcd);
}
EXPORT_SYMBOL_GPL(hd44780_common_free);

+2 −2
Original line number Diff line number Diff line
@@ -31,5 +31,5 @@ int hd44780_common_fontsize(struct charlcd *lcd, enum charlcd_fontsize size);
int hd44780_common_lines(struct charlcd *lcd, enum charlcd_lines lines);
int hd44780_common_redefine_char(struct charlcd *lcd, char *esc);

struct hd44780_common *hd44780_common_alloc(void);
void hd44780_common_free(struct hd44780_common *hd);
struct charlcd *hd44780_common_alloc(void);
void hd44780_common_free(struct charlcd *lcd);
+5 −12
Original line number Diff line number Diff line
@@ -831,18 +831,12 @@ static void lcd_init(void)
	struct charlcd *charlcd;
	struct hd44780_common *hdc;

	hdc = hd44780_common_alloc();
	if (!hdc)
	charlcd = hd44780_common_alloc();
	if (!charlcd)
		return;

	charlcd = charlcd_alloc(0);
	if (!charlcd) {
		hd44780_common_free(hdc);
		return;
	}

	hdc = charlcd->drvdata;
	hdc->hd44780 = &lcd;
	charlcd->drvdata = hdc;

	/*
	 * Init lcd struct with load-time values to preserve exact
@@ -1664,7 +1658,7 @@ static void panel_attach(struct parport *port)
	if (lcd.enabled)
		charlcd_unregister(lcd.charlcd);
err_unreg_device:
	charlcd_free(lcd.charlcd);
	hd44780_common_free(lcd.charlcd);
	lcd.charlcd = NULL;
	parport_unregister_device(pprt);
	pprt = NULL;
@@ -1691,8 +1685,7 @@ static void panel_detach(struct parport *port)
	if (lcd.enabled) {
		charlcd_unregister(lcd.charlcd);
		lcd.initialized = false;
		hd44780_common_free(lcd.charlcd->drvdata);
		charlcd_free(lcd.charlcd);
		hd44780_common_free(lcd.charlcd);
		lcd.charlcd = NULL;
	}