// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (C) 2016 Imagination Technologies * Author: Paul Burton <[email protected]> */ #include <linux/kernel.h> #include <linux/io.h> #include <linux/mfd/syscon.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> #include <linux/property.h> #include <linux/regmap.h> #include <linux/slab.h> #include "line-display.h" struct img_ascii_lcd_ctx; /** * struct img_ascii_lcd_config - Configuration information about an LCD model * @num_chars: the number of characters the LCD can display * @external_regmap: true if registers are in a system controller, else false * @ops: character line display operations */ struct img_ascii_lcd_config { … }; /** * struct img_ascii_lcd_ctx - Private data structure * @linedisp: line display structure * @base: the base address of the LCD registers * @regmap: the regmap through which LCD registers are accessed * @offset: the offset within regmap to the start of the LCD registers * @cfg: pointer to the LCD model configuration */ struct img_ascii_lcd_ctx { … }; /* * MIPS Boston development board */ static void boston_update(struct linedisp *linedisp) { … } static struct img_ascii_lcd_config boston_config = …; /* * MIPS Malta development board */ static void malta_update(struct linedisp *linedisp) { … } static struct img_ascii_lcd_config malta_config = …; /* * MIPS SEAD3 development board */ enum { … }; static int sead3_wait_sm_idle(struct img_ascii_lcd_ctx *ctx) { … } static int sead3_wait_lcd_idle(struct img_ascii_lcd_ctx *ctx) { … } static void sead3_update(struct linedisp *linedisp) { … } static struct img_ascii_lcd_config sead3_config = …; static const struct of_device_id img_ascii_lcd_matches[] = …; MODULE_DEVICE_TABLE(of, img_ascii_lcd_matches); /** * img_ascii_lcd_probe() - probe an LCD display device * @pdev: the LCD platform device * * Probe an LCD display device, ensuring that we have the required resources in * order to access the LCD & setting up private data as well as sysfs files. * * Return: 0 on success, else -ERRNO */ static int img_ascii_lcd_probe(struct platform_device *pdev) { … } /** * img_ascii_lcd_remove() - remove an LCD display device * @pdev: the LCD platform device * * Remove an LCD display device, freeing private resources & ensuring that the * driver stops using the LCD display registers. */ static void img_ascii_lcd_remove(struct platform_device *pdev) { … } static struct platform_driver img_ascii_lcd_driver = …; module_platform_driver(…) …; MODULE_DESCRIPTION(…) …; MODULE_AUTHOR(…) …; MODULE_LICENSE(…) …; MODULE_IMPORT_NS(…);