diff --git a/drivers/mga_vid.c b/drivers/mga_vid.c index bae7a464c7..19f47bf00a 100644 --- a/drivers/mga_vid.c +++ b/drivers/mga_vid.c @@ -97,11 +97,11 @@ static uint8_t *mga_param_buff = NULL; static uint32_t mga_param_buff_size=0; static uint32_t mga_param_buff_len=0; +#define min(x,y) (((x)<(y))?(x):(y)) + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) #include -#define min(x,y) (((x)<(y))?(x):(y)) - unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base) { unsigned long result = 0,value; @@ -1141,6 +1141,8 @@ void mga_handle_irq(int irq, void *dev_id, struct pt_regs *pregs) { static int mga_vid_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { int frame; + uint32_t tmp; + switch(cmd) { @@ -1231,6 +1233,22 @@ static int mga_vid_ioctl(struct inode *inode, struct file *file, unsigned int cm mga_vid_frame_sel(frame); break; + case MGA_VID_GET_LUMA: + tmp = regs.beslumactl - 0x80; + if (copy_to_user((uint32_t *) arg, &tmp, sizeof(uint32_t))) + { + printk(KERN_ERR "mga_vid: failed copy %p to userspace %p\n", + &tmp, (uint32_t *) arg); + return(-EFAULT); + } + break; + + case MGA_VID_SET_LUMA: + tmp = arg; + regs.beslumactl = tmp + 0x80; + mga_vid_write_regs(0); + break; + default: printk(KERN_ERR "mga_vid: Invalid ioctl\n"); return (-EINVAL); diff --git a/drivers/mga_vid.h b/drivers/mga_vid.h index 7a791e606f..d6d12f6ae9 100644 --- a/drivers/mga_vid.h +++ b/drivers/mga_vid.h @@ -47,6 +47,8 @@ uint32_t num_frames; #define MGA_VID_ON _IO ('J', 2) #define MGA_VID_OFF _IO ('J', 3) #define MGA_VID_FSEL _IOR('J', 4, int) +#define MGA_VID_GET_LUMA _IOR('J', 5, int) +#define MGA_VID_SET_LUMA _IOR('J', 6, int) #define MGA_G200 0x1234 #define MGA_G400 0x5678