1a937fd16SIgor Grinberg /* 2a937fd16SIgor Grinberg * (C) Copyright 2014 CompuLab, Ltd. <www.compulab.co.il> 3a937fd16SIgor Grinberg * 4a937fd16SIgor Grinberg * Authors: Igor Grinberg <grinberg@compulab.co.il> 5a937fd16SIgor Grinberg * 6a937fd16SIgor Grinberg * SPDX-License-Identifier: GPL-2.0+ 7a937fd16SIgor Grinberg */ 8a937fd16SIgor Grinberg 9a937fd16SIgor Grinberg #include <common.h> 10a937fd16SIgor Grinberg #include <asm/bootm.h> 11959bc1d5SIgor Grinberg #include <asm/gpio.h> 12a937fd16SIgor Grinberg 13a937fd16SIgor Grinberg #include "common.h" 14a937fd16SIgor Grinberg #include "eeprom.h" 15a937fd16SIgor Grinberg 16a937fd16SIgor Grinberg void cl_print_pcb_info(void) 17a937fd16SIgor Grinberg { 18a937fd16SIgor Grinberg u32 board_rev = get_board_rev(); 19a937fd16SIgor Grinberg u32 rev_major = board_rev / 100; 20a937fd16SIgor Grinberg u32 rev_minor = board_rev - (rev_major * 100); 21a937fd16SIgor Grinberg 22a937fd16SIgor Grinberg if ((rev_minor / 10) * 10 == rev_minor) 23a937fd16SIgor Grinberg rev_minor = rev_minor / 10; 24a937fd16SIgor Grinberg 25a937fd16SIgor Grinberg printf("PCB: %u.%u\n", rev_major, rev_minor); 26a937fd16SIgor Grinberg } 27959bc1d5SIgor Grinberg 28*0b6f358cSIgor Grinberg #ifdef CONFIG_SERIAL_TAG 29*0b6f358cSIgor Grinberg void __weak get_board_serial(struct tag_serialnr *serialnr) 30*0b6f358cSIgor Grinberg { 31*0b6f358cSIgor Grinberg /* 32*0b6f358cSIgor Grinberg * This corresponds to what happens when we can communicate with the 33*0b6f358cSIgor Grinberg * eeprom but don't get a valid board serial value. 34*0b6f358cSIgor Grinberg */ 35*0b6f358cSIgor Grinberg serialnr->low = 0; 36*0b6f358cSIgor Grinberg serialnr->high = 0; 37*0b6f358cSIgor Grinberg }; 38*0b6f358cSIgor Grinberg #endif 39*0b6f358cSIgor Grinberg 40959bc1d5SIgor Grinberg #ifdef CONFIG_CMD_USB 41959bc1d5SIgor Grinberg int cl_usb_hub_init(int gpio, const char *label) 42959bc1d5SIgor Grinberg { 43959bc1d5SIgor Grinberg if (gpio_request(gpio, label)) { 44959bc1d5SIgor Grinberg printf("Error: can't obtain GPIO%d for %s", gpio, label); 45959bc1d5SIgor Grinberg return -1; 46959bc1d5SIgor Grinberg } 47959bc1d5SIgor Grinberg 48959bc1d5SIgor Grinberg gpio_direction_output(gpio, 0); 49959bc1d5SIgor Grinberg udelay(10); 50959bc1d5SIgor Grinberg gpio_set_value(gpio, 1); 51959bc1d5SIgor Grinberg udelay(1000); 52959bc1d5SIgor Grinberg return 0; 53959bc1d5SIgor Grinberg } 54959bc1d5SIgor Grinberg 55959bc1d5SIgor Grinberg void cl_usb_hub_deinit(int gpio) 56959bc1d5SIgor Grinberg { 57959bc1d5SIgor Grinberg gpio_free(gpio); 58959bc1d5SIgor Grinberg } 59959bc1d5SIgor Grinberg #endif 60