static ssize_t lcd_proc_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { struct toshiba_acpi_dev *dev = PDE_DATA(file_inode(file)); char cmd[42]; size_t len; int value; int ret; int levels = dev->backlight_dev->props.max_brightness + 1; len = min(count, sizeof(cmd) - 1); if (copy_from_user(cmd, buf, len)) return -EFAULT; cmd[len] = '\0'; if (sscanf(cmd, " brightness : %i", &value) == 1 && value >= 0 && value < levels) { ret = set_lcd_brightness(dev, value); if (ret == 0) ret = count; } else { ret = -EINVAL; } return ret; }
//////////////////////////////////////////////////////////////////////////////// // disable_lcd // PURPOSE: Turn off the backlight, disable the display and stop the LCD controler. // PARAMS: None. // RETURNS: Nothing //////////////////////////////////////////////////////////////////////////////// void disable_lcd(void) { set_lcd_brightness(0); ucb1200_disable_lcd(); LCCR0 = 0x38; }
static int cmd_lcd_brightness(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { if (argc < 2) return cmd_usage(cmdtp); return set_lcd_brightness(argv[1]); }
static int toshiba_acpi_setup_backlight(struct toshiba_acpi_dev *dev) { struct backlight_properties props; int brightness; int ret; bool enabled; /* * Some machines don't support the backlight methods at all, and * others support it read-only. Either of these is pretty useless, * so only register the backlight device if the backlight method * supports both reads and writes. */ brightness = __get_lcd_brightness(dev); if (brightness < 0) return 0; ret = set_lcd_brightness(dev, brightness); if (ret) { pr_debug("Backlight method is read-only, disabling backlight support\n"); return 0; } /* Determine whether or not BIOS supports transflective backlight */ ret = get_tr_backlight_status(dev, &enabled); dev->tr_backlight_supported = !ret; memset(&props, 0, sizeof(props)); props.type = BACKLIGHT_PLATFORM; props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1; /* adding an extra level and having 0 change to transflective mode */ if (dev->tr_backlight_supported) props.max_brightness++; dev->backlight_dev = backlight_device_register("toshiba", &dev->acpi_dev->dev, dev, &toshiba_backlight_data, &props); if (IS_ERR(dev->backlight_dev)) { ret = PTR_ERR(dev->backlight_dev); pr_err("Could not register toshiba backlight device\n"); dev->backlight_dev = NULL; return ret; } dev->backlight_dev->props.brightness = brightness; return 0; }
//////////////////////////////////////////////////////////////////////////////// // init_lcd // PURPOSE: Initializes the LCD controler, enable the display and set the backlight. // PARAMS: None. // RETURNS: Nothing //////////////////////////////////////////////////////////////////////////////// void init_lcd(void) { int i; LCCR0 = 0x38; LCSR = 0xfff; LCCR1 = (240 - 16) | (5 << 10) | (9 << 16) | (61 << 24); LCCR2 = 320 - 1; LCCR3 = 25 | (70 << 8); DBAR1 = (u32) &frame_buffer; frame_buffer[0] = 0x2000; for (i=1; i<=15; i++) frame_buffer[i] = 0; for (i=16; i <= 16+(320*240); i++) frame_buffer[i] = 0x0000; LCCR0 = 0x39; ucb1200_init(); ucb1200_enable_lcd(); set_lcd_brightness(15); }
int misc_init_r(void) { volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR; /* * Re-configure flash setup using auto-detected info */ if (flash_info[1].size > 0) { out_be32(&im->sysconf.lpcs1aw, CSAW_START(gd->bd->bi_flashstart + flash_info[1].size) | CSAW_STOP(gd->bd->bi_flashstart + flash_info[1].size, flash_info[1].size)); sync_law(&im->sysconf.lpcs1aw); /* * Re-check to get correct base address */ flash_get_size (gd->bd->bi_flashstart + flash_info[1].size, 1); } else { /* Disable Bank 1 */ out_be32(&im->sysconf.lpcs1aw, 0x01000100); sync_law(&im->sysconf.lpcs1aw); } out_be32(&im->sysconf.lpcs0aw, CSAW_START(gd->bd->bi_flashstart) | CSAW_STOP(gd->bd->bi_flashstart, flash_info[0].size)); sync_law(&im->sysconf.lpcs0aw); /* * Re-check to get correct base address */ flash_get_size (gd->bd->bi_flashstart, 0); /* * Re-do flash protection upon new addresses */ flash_protect (FLAG_PROTECT_CLEAR, gd->bd->bi_flashstart, 0xffffffff, &flash_info[0]); /* Monitor protection ON by default */ flash_protect (FLAG_PROTECT_SET, CONFIG_SYS_MONITOR_BASE, CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN - 1, &flash_info[0]); /* Environment protection ON by default */ flash_protect (FLAG_PROTECT_SET, CONFIG_ENV_ADDR, CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1, &flash_info[0]); #ifdef CONFIG_ENV_ADDR_REDUND /* Redundant environment protection ON by default */ flash_protect (FLAG_PROTECT_SET, CONFIG_ENV_ADDR_REDUND, CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1, &flash_info[0]); #endif #ifdef CONFIG_FSL_DIU_FB set_lcd_brightness(0); /* Switch LCD-Backlight and LVDS-Interface on */ setbits_be32(&im->gpio.gpdir, 0x01040000); clrsetbits_be32(&im->gpio.gpdat, 0x01000000, 0x00040000); #endif #if defined(CONFIG_HARD_I2C) if (!getenv("ethaddr")) { uchar buf[6]; uchar ifm_oui[3] = { 0, 2, 1, }; int ret; /* I2C-0 for on-board eeprom */ i2c_set_bus_num(CONFIG_SYS_I2C_EEPROM_BUS_NUM); /* Read ethaddr from EEPROM */ ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, CONFIG_SYS_I2C_EEPROM_MAC_OFFSET, 1, buf, 6); if (ret != 0) { printf("Error: Unable to read MAC from I2C" " EEPROM at address %02X:%02X\n", CONFIG_SYS_I2C_EEPROM_ADDR, CONFIG_SYS_I2C_EEPROM_MAC_OFFSET); return 1; } /* Owned by IFM ? */ if (memcmp(buf, ifm_oui, sizeof(ifm_oui))) { printf("Illegal MAC address in EEPROM: %pM\n", buf); return 1; } eth_setenv_enetaddr("ethaddr", buf); } #endif /* defined(CONFIG_HARD_I2C) */ return 0; }
static int set_lcd_status(struct backlight_device *bd) { struct toshiba_acpi_dev *dev = bl_get_data(bd); return set_lcd_brightness(dev, bd->props.brightness); }