Commit c84907a1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'auxdisplay-v6.15-1' of...

Merge tag 'auxdisplay-v6.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-auxdisplay

Pull auxdisplay updates from Andy Shevchenko:

 - Refactor a couple of APIs to reduce amount of calls to memory
   allocator

 - Miscellaneous small fixes and improvements

* tag 'auxdisplay-v6.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-auxdisplay:
  auxdisplay: hd44780: Rename hd to hdc in hd44780_common_alloc()
  auxdisplay: hd44780: Call charlcd_alloc() from hd44780_common_alloc()
  auxdisplay: panel: Make use of hd44780_common_free()
  auxdisplay: hd44780: Make use of hd44780_common_free()
  auxdisplay: hd44780: Introduce hd44780_common_free()
  auxdisplay: lcd2s: Allocate memory for custom data in charlcd_alloc()
  auxdisplay: charlcd: Partially revert "Move hwidth and bwidth to struct hd44780_common"
  auxdisplay: panel: Fix an API misuse in panel.c
  auxdisplay: hd44780: Fix an API misuse in hd44780.c
  auxdisplay: MAX6959 should select BITREVERSE
  auxdisplay: seg-led-gpio: use gpiod_multi_set_value_cansleep
parents b23d8a07 67200d70
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -503,6 +503,7 @@ config HT16K33
config MAX6959
	tristate "Maxim MAX6958/6959 7-segment LED controller"
	depends on I2C
	select BITREVERSE
	select REGMAP_I2C
	select LINEDISP
	help
+3 −2
Original line number Diff line number Diff line
@@ -595,18 +595,19 @@ static int charlcd_init(struct charlcd *lcd)
	return 0;
}

struct charlcd *charlcd_alloc(void)
struct charlcd *charlcd_alloc(unsigned int drvdata_size)
{
	struct charlcd_priv *priv;
	struct charlcd *lcd;

	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
	priv = kzalloc(sizeof(*priv) + drvdata_size, GFP_KERNEL);
	if (!priv)
		return NULL;

	priv->esc_seq.len = -1;

	lcd = &priv->lcd;
	lcd->drvdata = priv->drvdata;

	return lcd;
}
+3 −2
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ struct charlcd {
		unsigned long y;
	} addr;

	void *drvdata;
	void *drvdata;			/* Set by charlcd_alloc() */
};

/**
@@ -95,7 +95,8 @@ struct charlcd_ops {
};

void charlcd_backlight(struct charlcd *lcd, enum charlcd_onoff on);
struct charlcd *charlcd_alloc(void);

struct charlcd *charlcd_alloc(unsigned int drvdata_size);
void charlcd_free(struct charlcd *lcd);

int charlcd_register(struct charlcd *lcd);
+6 −13
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();
	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:
	kfree(lcd);
fail1:
	kfree(hdc);
	hd44780_common_free(lcd);
	return ret;
}

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

	charlcd_unregister(lcd);
	kfree(hdc->hd44780);
	kfree(lcd->drvdata);

	kfree(lcd);
	hd44780_common_free(lcd);
}

static const struct of_device_id hd44780_of_match[] = {
+16 −8
Original line number Diff line number Diff line
@@ -351,20 +351,28 @@ 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 hd44780_common *hdc;
	struct charlcd *lcd;

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

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

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

MODULE_DESCRIPTION("Common functions for HD44780 (and compatibles) LCD displays");
MODULE_LICENSE("GPL");
Loading