drivers/staging/fbtft/fb_ssd1331.c
Source file repositories/reference/linux-study-clean/drivers/staging/fbtft/fb_ssd1331.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/fbtft/fb_ssd1331.c- Extension
.c- Size
- 5501 bytes
- Lines
- 203
- 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/gpio/consumer.hlinux/spi/spi.hlinux/delay.hfbtft.h
Detected Declarations
function init_displayfunction set_addr_winfunction write_reg8_bus8function Settingsfunction blank
Annotated Snippet
if (ret < 0) {
va_end(args);
dev_err(par->info->device,
"write() failed and returned %d\n", ret);
return;
}
}
gpiod_set_value(par->gpio.dc, 1);
va_end(args);
}
/*
* Grayscale Lookup Table
* GS1 - GS63
* The driver Gamma curve contains the relative values between the entries
* in the Lookup table.
*
* From datasheet:
* 8.8 Gray Scale Decoder
*
* there are total 180 Gamma Settings (Setting 0 to Setting 180)
* available for the Gray Scale table.
*
* The gray scale is defined in incremental way, with reference
* to the length of previous table entry:
* Setting of GS1 has to be >= 0
* Setting of GS2 has to be > Setting of GS1 +1
* Setting of GS3 has to be > Setting of GS2 +1
* :
* Setting of GS63 has to be > Setting of GS62 +1
*
*/
static int set_gamma(struct fbtft_par *par, u32 *curves)
{
unsigned long tmp[GAMMA_NUM * GAMMA_LEN];
int i, acc = 0;
for (i = 0; i < 63; i++) {
if (i > 0 && curves[i] < 2) {
dev_err(par->info->device,
"Illegal value in Grayscale Lookup Table at index %d. Must be greater than 1\n",
i);
return -EINVAL;
}
acc += curves[i];
tmp[i] = acc;
if (acc > 180) {
dev_err(par->info->device,
"Illegal value(s) in Grayscale Lookup Table. At index=%d, the accumulated value has exceeded 180\n",
i);
return -EINVAL;
}
}
write_reg(par, 0xB8,
tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], tmp[6],
tmp[7], tmp[8], tmp[9], tmp[10], tmp[11], tmp[12], tmp[13],
tmp[14], tmp[15], tmp[16], tmp[17], tmp[18], tmp[19], tmp[20],
tmp[21], tmp[22], tmp[23], tmp[24], tmp[25], tmp[26], tmp[27],
tmp[28], tmp[29], tmp[30], tmp[31], tmp[32], tmp[33], tmp[34],
tmp[35], tmp[36], tmp[37], tmp[38], tmp[39], tmp[40], tmp[41],
tmp[42], tmp[43], tmp[44], tmp[45], tmp[46], tmp[47], tmp[48],
tmp[49], tmp[50], tmp[51], tmp[52], tmp[53], tmp[54], tmp[55],
tmp[56], tmp[57], tmp[58], tmp[59], tmp[60], tmp[61],
tmp[62]);
return 0;
}
static int blank(struct fbtft_par *par, bool on)
{
if (on)
write_reg(par, 0xAE);
else
write_reg(par, 0xAF);
return 0;
}
static struct fbtft_display display = {
.regwidth = 8,
.width = WIDTH,
.height = HEIGHT,
.gamma_num = GAMMA_NUM,
.gamma_len = GAMMA_LEN,
.gamma = DEFAULT_GAMMA,
.fbtftops = {
.write_register = write_reg8_bus8,
.init_display = init_display,
.set_addr_win = set_addr_win,
.set_gamma = set_gamma,
Annotation
- Immediate include surface: `linux/module.h`, `linux/kernel.h`, `linux/init.h`, `linux/gpio/consumer.h`, `linux/spi/spi.h`, `linux/delay.h`, `fbtft.h`.
- Detected declarations: `function init_display`, `function set_addr_win`, `function write_reg8_bus8`, `function Settings`, `function blank`.
- 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.