drivers/video/fbdev/geode/video_gx.c

Source file repositories/reference/linux-study-clean/drivers/video/fbdev/geode/video_gx.c

File Facts

System
Linux kernel
Corpus path
drivers/video/fbdev/geode/video_gx.c
Extension
.c
Size
9908 bytes
Lines
346
Domain
Driver Families
Bucket
drivers/video
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct gx_pll_entry {
	long pixclock; /* ps */
	u32 sys_rstpll_bits;
	u32 dotpll_value;
};

#define POSTDIV3 ((u32)MSR_GLCP_SYS_RSTPLL_DOTPOSTDIV3)
#define PREMULT2 ((u32)MSR_GLCP_SYS_RSTPLL_DOTPREMULT2)
#define PREDIV2  ((u32)MSR_GLCP_SYS_RSTPLL_DOTPOSTDIV3)

static const struct gx_pll_entry gx_pll_table_48MHz[] = {
	{ 40123, POSTDIV3,	    0x00000BF2 },	/*  24.9230 */
	{ 39721, 0,		    0x00000037 },	/*  25.1750 */
	{ 35308, POSTDIV3|PREMULT2, 0x00000B1A },	/*  28.3220 */
	{ 31746, POSTDIV3,	    0x000002D2 },	/*  31.5000 */
	{ 27777, POSTDIV3|PREMULT2, 0x00000FE2 },	/*  36.0000 */
	{ 26666, POSTDIV3,	    0x0000057A },	/*  37.5000 */
	{ 25000, POSTDIV3,	    0x0000030A },	/*  40.0000 */
	{ 22271, 0,		    0x00000063 },	/*  44.9000 */
	{ 20202, 0,		    0x0000054B },	/*  49.5000 */
	{ 20000, 0,		    0x0000026E },	/*  50.0000 */
	{ 19860, PREMULT2,	    0x00000037 },	/*  50.3500 */
	{ 18518, POSTDIV3|PREMULT2, 0x00000B0D },	/*  54.0000 */
	{ 17777, 0,		    0x00000577 },	/*  56.2500 */
	{ 17733, 0,		    0x000007F7 },	/*  56.3916 */
	{ 17653, 0,		    0x0000057B },	/*  56.6444 */
	{ 16949, PREMULT2,	    0x00000707 },	/*  59.0000 */
	{ 15873, POSTDIV3|PREMULT2, 0x00000B39 },	/*  63.0000 */
	{ 15384, POSTDIV3|PREMULT2, 0x00000B45 },	/*  65.0000 */
	{ 14814, POSTDIV3|PREMULT2, 0x00000FC1 },	/*  67.5000 */
	{ 14124, POSTDIV3,	    0x00000561 },	/*  70.8000 */
	{ 13888, POSTDIV3,	    0x000007E1 },	/*  72.0000 */
	{ 13426, PREMULT2,	    0x00000F4A },	/*  74.4810 */
	{ 13333, 0,		    0x00000052 },	/*  75.0000 */
	{ 12698, 0,		    0x00000056 },	/*  78.7500 */
	{ 12500, POSTDIV3|PREMULT2, 0x00000709 },	/*  80.0000 */
	{ 11135, PREMULT2,	    0x00000262 },	/*  89.8000 */
	{ 10582, 0,		    0x000002D2 },	/*  94.5000 */
	{ 10101, PREMULT2,	    0x00000B4A },	/*  99.0000 */
	{ 10000, PREMULT2,	    0x00000036 },	/* 100.0000 */
	{  9259, 0,		    0x000007E2 },	/* 108.0000 */
	{  8888, 0,		    0x000007F6 },	/* 112.5000 */
	{  7692, POSTDIV3|PREMULT2, 0x00000FB0 },	/* 130.0000 */
	{  7407, POSTDIV3|PREMULT2, 0x00000B50 },	/* 135.0000 */
	{  6349, 0,		    0x00000055 },	/* 157.5000 */
	{  6172, 0,		    0x000009C1 },	/* 162.0000 */
	{  5787, PREMULT2,	    0x0000002D },	/* 172.798  */
	{  5698, 0,		    0x000002C1 },	/* 175.5000 */
	{  5291, 0,		    0x000002D1 },	/* 189.0000 */
	{  4938, 0,		    0x00000551 },	/* 202.5000 */
	{  4357, 0,		    0x0000057D },	/* 229.5000 */
};

static const struct gx_pll_entry gx_pll_table_14MHz[] = {
	{ 39721, 0, 0x00000037 },	/*  25.1750 */
	{ 35308, 0, 0x00000B7B },	/*  28.3220 */
	{ 31746, 0, 0x000004D3 },	/*  31.5000 */
	{ 27777, 0, 0x00000BE3 },	/*  36.0000 */
	{ 26666, 0, 0x0000074F },	/*  37.5000 */
	{ 25000, 0, 0x0000050B },	/*  40.0000 */
	{ 22271, 0, 0x00000063 },	/*  44.9000 */
	{ 20202, 0, 0x0000054B },	/*  49.5000 */
	{ 20000, 0, 0x0000026E },	/*  50.0000 */
	{ 19860, 0, 0x000007C3 },	/*  50.3500 */
	{ 18518, 0, 0x000007E3 },	/*  54.0000 */
	{ 17777, 0, 0x00000577 },	/*  56.2500 */
	{ 17733, 0, 0x000002FB },	/*  56.3916 */
	{ 17653, 0, 0x0000057B },	/*  56.6444 */
	{ 16949, 0, 0x0000058B },	/*  59.0000 */
	{ 15873, 0, 0x0000095E },	/*  63.0000 */
	{ 15384, 0, 0x0000096A },	/*  65.0000 */
	{ 14814, 0, 0x00000BC2 },	/*  67.5000 */
	{ 14124, 0, 0x0000098A },	/*  70.8000 */
	{ 13888, 0, 0x00000BE2 },	/*  72.0000 */
	{ 13333, 0, 0x00000052 },	/*  75.0000 */
	{ 12698, 0, 0x00000056 },	/*  78.7500 */
	{ 12500, 0, 0x0000050A },	/*  80.0000 */
	{ 11135, 0, 0x0000078E },	/*  89.8000 */
	{ 10582, 0, 0x000002D2 },	/*  94.5000 */
	{ 10101, 0, 0x000011F6 },	/*  99.0000 */
	{ 10000, 0, 0x0000054E },	/* 100.0000 */
	{  9259, 0, 0x000007E2 },	/* 108.0000 */
	{  8888, 0, 0x000002FA },	/* 112.5000 */
	{  7692, 0, 0x00000BB1 },	/* 130.0000 */
	{  7407, 0, 0x00000975 },	/* 135.0000 */
	{  6349, 0, 0x00000055 },	/* 157.5000 */
	{  6172, 0, 0x000009C1 },	/* 162.0000 */
	{  5698, 0, 0x000002C1 },	/* 175.5000 */
	{  5291, 0, 0x00000539 },	/* 189.0000 */
	{  4938, 0, 0x00000551 },	/* 202.5000 */

Annotation

Implementation Notes