mbxdebugfs.c 8.0 KB
Newer Older
1
#include <linux/debugfs.h>
2
#include <linux/slab.h>
3 4 5 6 7 8 9 10 11 12 13

#define BIG_BUFFER_SIZE	(1024)

static char big_buffer[BIG_BUFFER_SIZE];

struct mbxfb_debugfs_data {
	struct dentry *dir;
	struct dentry *sysconf;
	struct dentry *clock;
	struct dentry *display;
	struct dentry *gsctl;
14 15
	struct dentry *sdram;
	struct dentry *misc;
16 17 18 19 20 21 22 23 24 25 26 27 28
};

static ssize_t write_file_dummy(struct file *file, const char __user *buf,
				size_t count, loff_t *ppos)
{
	return count;
}

static ssize_t sysconf_read_file(struct file *file, char __user *userbuf,
				 size_t count, loff_t *ppos)
{
	char * s = big_buffer;

29 30 31 32 33
	s += sprintf(s, "SYSCFG = %08x\n", readl(SYSCFG));
	s += sprintf(s, "PFBASE = %08x\n", readl(PFBASE));
	s += sprintf(s, "PFCEIL = %08x\n", readl(PFCEIL));
	s += sprintf(s, "POLLFLAG = %08x\n", readl(POLLFLAG));
	s += sprintf(s, "SYSRST = %08x\n", readl(SYSRST));
34 35 36 37 38 39 40 41 42 43 44

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}


static ssize_t gsctl_read_file(struct file *file, char __user *userbuf,
			       size_t count, loff_t *ppos)
{
	char * s = big_buffer;

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
	s += sprintf(s, "GSCTRL = %08x\n", readl(GSCTRL));
	s += sprintf(s, "VSCTRL = %08x\n", readl(VSCTRL));
	s += sprintf(s, "GBBASE = %08x\n", readl(GBBASE));
	s += sprintf(s, "VBBASE = %08x\n", readl(VBBASE));
	s += sprintf(s, "GDRCTRL = %08x\n", readl(GDRCTRL));
	s += sprintf(s, "VCMSK = %08x\n", readl(VCMSK));
	s += sprintf(s, "GSCADR = %08x\n", readl(GSCADR));
	s += sprintf(s, "VSCADR = %08x\n", readl(VSCADR));
	s += sprintf(s, "VUBASE = %08x\n", readl(VUBASE));
	s += sprintf(s, "VVBASE = %08x\n", readl(VVBASE));
	s += sprintf(s, "GSADR = %08x\n", readl(GSADR));
	s += sprintf(s, "VSADR = %08x\n", readl(VSADR));
	s += sprintf(s, "HCCTRL = %08x\n", readl(HCCTRL));
	s += sprintf(s, "HCSIZE = %08x\n", readl(HCSIZE));
	s += sprintf(s, "HCPOS = %08x\n", readl(HCPOS));
	s += sprintf(s, "HCBADR = %08x\n", readl(HCBADR));
	s += sprintf(s, "HCCKMSK = %08x\n", readl(HCCKMSK));
	s += sprintf(s, "GPLUT = %08x\n", readl(GPLUT));
63 64 65 66 67 68 69 70 71 72

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}

static ssize_t display_read_file(struct file *file, char __user *userbuf,
				 size_t count, loff_t *ppos)
{
	char * s = big_buffer;

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
	s += sprintf(s, "DSCTRL = %08x\n", readl(DSCTRL));
	s += sprintf(s, "DHT01 = %08x\n", readl(DHT01));
	s += sprintf(s, "DHT02 = %08x\n", readl(DHT02));
	s += sprintf(s, "DHT03 = %08x\n", readl(DHT03));
	s += sprintf(s, "DVT01 = %08x\n", readl(DVT01));
	s += sprintf(s, "DVT02 = %08x\n", readl(DVT02));
	s += sprintf(s, "DVT03 = %08x\n", readl(DVT03));
	s += sprintf(s, "DBCOL = %08x\n", readl(DBCOL));
	s += sprintf(s, "BGCOLOR = %08x\n", readl(BGCOLOR));
	s += sprintf(s, "DINTRS = %08x\n", readl(DINTRS));
	s += sprintf(s, "DINTRE = %08x\n", readl(DINTRE));
	s += sprintf(s, "DINTRCNT = %08x\n", readl(DINTRCNT));
	s += sprintf(s, "DSIG = %08x\n", readl(DSIG));
	s += sprintf(s, "DMCTRL = %08x\n", readl(DMCTRL));
	s += sprintf(s, "CLIPCTRL = %08x\n", readl(CLIPCTRL));
	s += sprintf(s, "SPOCTRL = %08x\n", readl(SPOCTRL));
	s += sprintf(s, "SVCTRL = %08x\n", readl(SVCTRL));
	s += sprintf(s, "DLSTS = %08x\n", readl(DLSTS));
	s += sprintf(s, "DLLCTRL = %08x\n", readl(DLLCTRL));
	s += sprintf(s, "DVLNUM = %08x\n", readl(DVLNUM));
	s += sprintf(s, "DUCTRL = %08x\n", readl(DUCTRL));
	s += sprintf(s, "DVECTRL = %08x\n", readl(DVECTRL));
	s += sprintf(s, "DHDET = %08x\n", readl(DHDET));
	s += sprintf(s, "DVDET = %08x\n", readl(DVDET));
	s += sprintf(s, "DODMSK = %08x\n", readl(DODMSK));
	s += sprintf(s, "CSC01 = %08x\n", readl(CSC01));
	s += sprintf(s, "CSC02 = %08x\n", readl(CSC02));
	s += sprintf(s, "CSC03 = %08x\n", readl(CSC03));
	s += sprintf(s, "CSC04 = %08x\n", readl(CSC04));
	s += sprintf(s, "CSC05 = %08x\n", readl(CSC05));
103 104 105 106 107 108 109 110 111 112

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}

static ssize_t clock_read_file(struct file *file, char __user *userbuf,
			       size_t count, loff_t *ppos)
{
	char * s = big_buffer;

113 114 115 116 117 118 119 120 121 122 123 124 125
	s += sprintf(s, "SYSCLKSRC = %08x\n", readl(SYSCLKSRC));
	s += sprintf(s, "PIXCLKSRC = %08x\n", readl(PIXCLKSRC));
	s += sprintf(s, "CLKSLEEP = %08x\n", readl(CLKSLEEP));
	s += sprintf(s, "COREPLL = %08x\n", readl(COREPLL));
	s += sprintf(s, "DISPPLL = %08x\n", readl(DISPPLL));
	s += sprintf(s, "PLLSTAT = %08x\n", readl(PLLSTAT));
	s += sprintf(s, "VOVRCLK = %08x\n", readl(VOVRCLK));
	s += sprintf(s, "PIXCLK = %08x\n", readl(PIXCLK));
	s += sprintf(s, "MEMCLK = %08x\n", readl(MEMCLK));
	s += sprintf(s, "M24CLK = %08x\n", readl(M24CLK));
	s += sprintf(s, "MBXCLK = %08x\n", readl(MBXCLK));
	s += sprintf(s, "SDCLK = %08x\n", readl(SDCLK));
	s += sprintf(s, "PIXCLKDIV = %08x\n", readl(PIXCLKDIV));
126 127 128 129 130

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}

131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
static ssize_t sdram_read_file(struct file *file, char __user *userbuf,
			       size_t count, loff_t *ppos)
{
	char * s = big_buffer;

	s += sprintf(s, "LMRST = %08x\n", readl(LMRST));
	s += sprintf(s, "LMCFG = %08x\n", readl(LMCFG));
	s += sprintf(s, "LMPWR = %08x\n", readl(LMPWR));
	s += sprintf(s, "LMPWRSTAT = %08x\n", readl(LMPWRSTAT));
	s += sprintf(s, "LMCEMR = %08x\n", readl(LMCEMR));
	s += sprintf(s, "LMTYPE = %08x\n", readl(LMTYPE));
	s += sprintf(s, "LMTIM = %08x\n", readl(LMTIM));
	s += sprintf(s, "LMREFRESH = %08x\n", readl(LMREFRESH));
	s += sprintf(s, "LMPROTMIN = %08x\n", readl(LMPROTMIN));
	s += sprintf(s, "LMPROTMAX = %08x\n", readl(LMPROTMAX));
	s += sprintf(s, "LMPROTCFG = %08x\n", readl(LMPROTCFG));
	s += sprintf(s, "LMPROTERR = %08x\n", readl(LMPROTERR));

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}

static ssize_t misc_read_file(struct file *file, char __user *userbuf,
			       size_t count, loff_t *ppos)
{
	char * s = big_buffer;

	s += sprintf(s, "LCD_CONFIG = %08x\n", readl(LCD_CONFIG));
	s += sprintf(s, "ODFBPWR = %08x\n", readl(ODFBPWR));
	s += sprintf(s, "ODFBSTAT = %08x\n", readl(ODFBSTAT));
	s += sprintf(s, "ID = %08x\n", readl(ID));

	return  simple_read_from_buffer(userbuf, count, ppos,
					big_buffer, s-big_buffer);
}


168
static const struct file_operations sysconf_fops = {
169 170
	.read = sysconf_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
171
	.open = simple_open,
172
	.llseek = default_llseek,
173 174
};

175
static const struct file_operations clock_fops = {
176 177
	.read = clock_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
178
	.open = simple_open,
179
	.llseek = default_llseek,
180 181
};

182
static const struct file_operations display_fops = {
183 184
	.read = display_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
185
	.open = simple_open,
186
	.llseek = default_llseek,
187 188
};

189
static const struct file_operations gsctl_fops = {
190 191
	.read = gsctl_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
192
	.open = simple_open,
193
	.llseek = default_llseek,
194 195
};

196
static const struct file_operations sdram_fops = {
197 198
	.read = sdram_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
199
	.open = simple_open,
200
	.llseek = default_llseek,
201 202
};

203
static const struct file_operations misc_fops = {
204 205
	.read = misc_read_file,
	.write = write_file_dummy,
G
Geliang Tang 已提交
206
	.open = simple_open,
207
	.llseek = default_llseek,
208
};
209

210
static void mbxfb_debugfs_init(struct fb_info *fbi)
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
{
	struct mbxfb_info *mfbi = fbi->par;
	struct mbxfb_debugfs_data *dbg;

	dbg = kzalloc(sizeof(struct mbxfb_debugfs_data), GFP_KERNEL);
	mfbi->debugfs_data = dbg;

	dbg->dir = debugfs_create_dir("mbxfb", NULL);
	dbg->sysconf = debugfs_create_file("sysconf", 0444, dbg->dir,
				      fbi, &sysconf_fops);
	dbg->clock = debugfs_create_file("clock", 0444, dbg->dir,
				    fbi, &clock_fops);
	dbg->display = debugfs_create_file("display", 0444, dbg->dir,
				      fbi, &display_fops);
	dbg->gsctl = debugfs_create_file("gsctl", 0444, dbg->dir,
				    fbi, &gsctl_fops);
227 228 229 230
	dbg->sdram = debugfs_create_file("sdram", 0444, dbg->dir,
					fbi, &sdram_fops);
	dbg->misc = debugfs_create_file("misc", 0444, dbg->dir,
					fbi, &misc_fops);
231 232
}

233
static void mbxfb_debugfs_remove(struct fb_info *fbi)
234 235 236 237
{
	struct mbxfb_info *mfbi = fbi->par;
	struct mbxfb_debugfs_data *dbg = mfbi->debugfs_data;

238 239
	debugfs_remove(dbg->misc);
	debugfs_remove(dbg->sdram);
240 241 242 243 244 245
	debugfs_remove(dbg->gsctl);
	debugfs_remove(dbg->display);
	debugfs_remove(dbg->clock);
	debugfs_remove(dbg->sysconf);
	debugfs_remove(dbg->dir);
}