mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-20 10:13:09 +00:00
ad371d8cd1
In case someone detects a PDA and u-boot sets the 'pda' variable, and the user does a saveenv, the pda is set in env, and if the screen is removed, u-boot will still have in the env the 'pda' variable, even if no screen is attached. In order to fix this, we have to reset the 'pda' variable, such that it's not just set if the screen is detected, but also unset if no screen is detected. Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
77 lines
1.4 KiB
C
77 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (C) 2017 Microchip
|
|
* Wenyou Yang <wenyou.yang@microchip.com>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <w1.h>
|
|
#include <w1-eeprom.h>
|
|
#include <dm/device-internal.h>
|
|
|
|
#define AT91_PDA_EEPROM_ID_OFFSET 15
|
|
#define AT91_PDA_EEPROM_ID_LENGTH 5
|
|
#define AT91_PDA_EEPROM_DEFAULT_BUS 0
|
|
|
|
char *get_cpu_name(void);
|
|
|
|
void dummy(void)
|
|
{
|
|
}
|
|
|
|
#if defined CONFIG_W1
|
|
void at91_pda_detect(void)
|
|
{
|
|
struct udevice *bus, *dev;
|
|
u8 buf[AT91_PDA_EEPROM_ID_LENGTH + 1] = {0};
|
|
int ret;
|
|
int pda = 0;
|
|
|
|
ret = w1_get_bus(AT91_PDA_EEPROM_DEFAULT_BUS, &bus);
|
|
if (ret)
|
|
goto pda_detect_err;
|
|
|
|
for (device_find_first_child(bus, &dev);
|
|
dev;
|
|
device_find_next_child(&dev)) {
|
|
ret = device_probe(dev);
|
|
if (ret) {
|
|
continue;
|
|
} else {
|
|
ret = w1_eeprom_read_buf(dev, AT91_PDA_EEPROM_ID_OFFSET,
|
|
(u8 *)buf, AT91_PDA_EEPROM_ID_LENGTH);
|
|
if (ret)
|
|
goto pda_detect_err;
|
|
break;
|
|
}
|
|
}
|
|
pda = simple_strtoul((const char *)buf, NULL, 10);
|
|
|
|
switch (pda) {
|
|
case 7000:
|
|
if (buf[4] == 'B')
|
|
printf("PDA TM7000B detected\n");
|
|
else
|
|
printf("PDA TM7000 detected\n");
|
|
break;
|
|
case 4300:
|
|
printf("PDA TM4300 detected\n");
|
|
break;
|
|
case 5000:
|
|
printf("PDA TM5000 detected\n");
|
|
break;
|
|
}
|
|
|
|
pda_detect_err:
|
|
env_set("pda", (const char *)buf);
|
|
}
|
|
#else
|
|
void at91_pda_detect(void)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
void at91_prepare_cpu_var(void)
|
|
{
|
|
env_set("cpu", get_cpu_name());
|
|
}
|