drivers/staging/fbtft/fb_ili9325.c
Source file repositories/reference/linux-study-clean/drivers/staging/fbtft/fb_ili9325.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/fbtft/fb_ili9325.c- Extension
.c- Size
- 8282 bytes
- Lines
- 262
- Domain
- Driver Families
- Bucket
- drivers/staging
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/kernel.hlinux/init.hlinux/delay.hfbtft.h
Detected Declarations
function init_displayfunction set_addr_winfunction set_varfunction set_gamma
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0+
/*
* FB driver for the ILI9325 LCD Controller
*
* Copyright (C) 2013 Noralf Tronnes
*
* Based on ili9325.c by Jeroen Domburg
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
#include "fbtft.h"
#define DRVNAME "fb_ili9325"
#define WIDTH 240
#define HEIGHT 320
#define BPP 16
#define FPS 20
#define DEFAULT_GAMMA "0F 00 7 2 0 0 6 5 4 1\n" \
"04 16 2 7 6 3 2 1 7 7"
static unsigned int bt = 6; /* VGL=Vci*4 , VGH=Vci*4 */
module_param(bt, uint, 0000);
MODULE_PARM_DESC(bt, "Sets the factor used in the step-up circuits");
static unsigned int vc = 0x03; /* Vci1=Vci*0.80 */
module_param(vc, uint, 0000);
MODULE_PARM_DESC(vc, "Sets the ratio factor of Vci to generate the reference voltages Vci1");
static unsigned int vrh = 0x0d; /* VREG1OUT=Vci*1.85 */
module_param(vrh, uint, 0000);
MODULE_PARM_DESC(vrh, "Set the amplifying rate (1.6 ~ 1.9) of Vci applied to output the VREG1OUT");
static unsigned int vdv = 0x12; /* VCOMH amplitude=VREG1OUT*0.98 */
module_param(vdv, uint, 0000);
MODULE_PARM_DESC(vdv, "Select the factor of VREG1OUT to set the amplitude of Vcom");
static unsigned int vcm = 0x0a; /* VCOMH=VREG1OUT*0.735 */
module_param(vcm, uint, 0000);
MODULE_PARM_DESC(vcm, "Set the internal VcomH voltage");
/*
* Verify that this configuration is within the Voltage limits
*
* Display module configuration: Vcc = IOVcc = Vci = 3.3V
*
* Voltages
* ----------
* Vci = 3.3
* Vci1 = Vci * 0.80 = 2.64
* DDVDH = Vci1 * 2 = 5.28
* VCL = -Vci1 = -2.64
* VREG1OUT = Vci * 1.85 = 4.88
* VCOMH = VREG1OUT * 0.735 = 3.59
* VCOM amplitude = VREG1OUT * 0.98 = 4.79
* VGH = Vci * 4 = 13.2
* VGL = -Vci * 4 = -13.2
*
* Limits
* --------
* Power supplies
* 1.65 < IOVcc < 3.30 => 1.65 < 3.3 < 3.30
* 2.40 < Vcc < 3.30 => 2.40 < 3.3 < 3.30
* 2.50 < Vci < 3.30 => 2.50 < 3.3 < 3.30
*
* Source/VCOM power supply voltage
* 4.50 < DDVDH < 6.0 => 4.50 < 5.28 < 6.0
* -3.0 < VCL < -2.0 => -3.0 < -2.64 < -2.0
* VCI - VCL < 6.0 => 5.94 < 6.0
*
* Gate driver output voltage
* 10 < VGH < 20 => 10 < 13.2 < 20
* -15 < VGL < -5 => -15 < -13.2 < -5
* VGH - VGL < 32 => 26.4 < 32
*
* VCOM driver output voltage
* VCOMH - VCOML < 6.0 => 4.79 < 6.0
*/
static int init_display(struct fbtft_par *par)
{
par->fbtftops.reset(par);
bt &= 0x07;
vc &= 0x07;
vrh &= 0x0f;
vdv &= 0x1f;
Annotation
- Immediate include surface: `linux/module.h`, `linux/kernel.h`, `linux/init.h`, `linux/delay.h`, `fbtft.h`.
- Detected declarations: `function init_display`, `function set_addr_win`, `function set_var`, `function set_gamma`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.