I am referring to this driver of exar Uart 788
http://www.exar.com/interface/uart-a...arts/XR16L788/

and I would like to know why the Major number has been explicitly defined in the code.

The kernel function tty_register_driver() (in tty_io.c) calls alloc_chrdev_region() function.

This is the code of tty_register_driver() function:

int tty_register_driver(struct tty_driver *driver)
{
int error;
int i;
dev_t dev;
void **p = NULL;

if (!(driver->flags & TTY_DRIVER_DEVPTS_MEM) && driver->num) {
p = kzalloc(driver->num * 2 * sizeof(void *), GFP_KERNEL);
if (!p)
return -ENOMEM;
}

if (!driver->major) {
error = alloc_chrdev_region(&dev, driver->minor_start,
driver->num, driver->name);
if (!error) {
driver->major = MAJOR(dev);
driver->minor_start = MINOR(dev);
}
} else {
dev = MKDEV(driver->major, driver->minor_start);
error = register_chrdev_region(dev, driver->num, driver->name);
}