Compare commits
2 Commits
2016.05-am
...
2016.05-am
| Author | SHA1 | Date |
|---|---|---|
|
|
a156716401 | |
|
|
424b41c40e |
|
|
@ -10,4 +10,4 @@ ifeq ($(CONFIG_SKIP_LOWLEVEL_INIT),)
|
||||||
obj-y := mux.o
|
obj-y := mux.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
obj-y += board.o ../common/bdparser.o ../common/board_descriptor.o shield.o shield_can.o shield_comio.o fileaccess.o
|
obj-y += board.o ../common/bdparser.o ../common/board_descriptor.o shield.o shield_can.o shield_comio.o shield_gnss_can.o fileaccess.o
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
#include "shield.h"
|
#include "shield.h"
|
||||||
#include "shield_can.h"
|
#include "shield_can.h"
|
||||||
#include "shield_comio.h"
|
#include "shield_comio.h"
|
||||||
|
#include "shield_gnss_can.h"
|
||||||
#include "fileaccess.h"
|
#include "fileaccess.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
@ -82,6 +83,7 @@ static BD_Context bdctx[3]; /* The descriptor context */
|
||||||
|
|
||||||
#define SHIELD_COM_IO 0
|
#define SHIELD_COM_IO 0
|
||||||
#define SHIELD_DUALCAN 1
|
#define SHIELD_DUALCAN 1
|
||||||
|
#define SHIELD_GNSS_CAN 2
|
||||||
|
|
||||||
static int _bd_init(void)
|
static int _bd_init(void)
|
||||||
{
|
{
|
||||||
|
|
@ -591,6 +593,16 @@ static struct shield_command known_shield_commands[] = {
|
||||||
"fdt set $can1 status okay;",
|
"fdt set $can1 status okay;",
|
||||||
can_shield_init
|
can_shield_init
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
SHIELD_GNSS_CAN,
|
||||||
|
"gnss-can",
|
||||||
|
"shield gnss-can gnss-mode uart can termination off",
|
||||||
|
"fdt get value serial0 /aliases serial0;" \
|
||||||
|
"fdt set $serial0 status okay;" \
|
||||||
|
"fdt get value can1 /aliases d_can1;" \
|
||||||
|
"fdt set $can1 status okay;",
|
||||||
|
gnss_can_shield_init
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct shield_command* get_shield_command(int shield_id)
|
static const struct shield_command* get_shield_command(int shield_id)
|
||||||
|
|
@ -614,7 +626,7 @@ static void shield_config(void)
|
||||||
const struct shield_command *cmd;
|
const struct shield_command *cmd;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
int shield_id = bd_get_shield(0);
|
int shield_id = SHIELD_GNSS_CAN;//bd_get_shield(0);
|
||||||
if (shield_id < 0) {
|
if (shield_id < 0) {
|
||||||
debug("No shield found in bd\n");
|
debug("No shield found in bd\n");
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ static int do_shieldmode(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
|
||||||
}
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
shield, 6, 1, do_shieldmode,
|
shield, 7, 1, do_shieldmode,
|
||||||
"Set the shield mode",
|
"Set the shield mode",
|
||||||
"dualcan termination [on|off] [on|off]\n"
|
"dualcan termination [on|off] [on|off]\n"
|
||||||
"shield comio mode [rs232|rs485] termination [on|off]\n"
|
"shield comio mode [rs232|rs485] termination [on|off]\n"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,222 @@
|
||||||
|
#define DEBUG
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <asm/gpio.h>
|
||||||
|
#include <asm/arch/mux.h>
|
||||||
|
|
||||||
|
#include "shield.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
|
#define NETBIRD_GPIO_RST_SHIELD_N GPIO_TO_PIN(0, 27)
|
||||||
|
#define NETBIRD_GPIO_LATCH GPIO_TO_PIN(0, 7)
|
||||||
|
#define NETBIRD_GPIO_MODE_1 GPIO_TO_PIN(1, 10)
|
||||||
|
|
||||||
|
static int shield_slot_initialized = 0;
|
||||||
|
|
||||||
|
|
||||||
|
static struct module_pin_mux can_shield_netbird_pin_mux_config[] = {
|
||||||
|
/* Leave UART0 unconfigured because we want to configure it as needed by linux (can/spi/uart/etc) */
|
||||||
|
{OFFSET(uart0_ctsn), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* CAN1 tx */
|
||||||
|
//{OFFSET(uart0_rxd), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* CAN0 tx */
|
||||||
|
{OFFSET(ecap0_in_pwm0_out), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* Latch EN */
|
||||||
|
{-1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct module_pin_mux can_shield_netbird_pin_mux_final[] = {
|
||||||
|
/* Leave UART0 unconfigured because we want to configure it as needed by linux (can/spi/uart/etc) */
|
||||||
|
{OFFSET(uart0_ctsn), (MODE(2) | PULLUDEN | PULLUP_EN)}, /* E18 CAN1 tx */
|
||||||
|
{OFFSET(uart0_rtsn), (MODE(2) | PULLUDDIS | RXACTIVE)}, /* E17 CAN1 rx */
|
||||||
|
{OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS)}, /* (E15) UART0_RXD */
|
||||||
|
{OFFSET(uart0_txd), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (E16) UART0_TXD */
|
||||||
|
//{OFFSET(uart0_txd), (MODE(2) | PULLUDDIS | RXACTIVE)}, /* CAN0 rx */
|
||||||
|
//{OFFSET(uart0_rxd), (MODE(2) | PULLUDEN | PULLUP_EN)}, /* CAN0 tx */
|
||||||
|
{-1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct module_pin_mux gnss_shield_netbird_pin_mux_uart[] = {
|
||||||
|
/* Leave UART0 unconfigured because we want to configure it as needed by linux (can/spi/uart/etc) */
|
||||||
|
{OFFSET(uart0_rxd), (MODE(7) | PULLUDDIS)}, /* (E15) UART0_RXD */
|
||||||
|
{OFFSET(uart0_txd), (MODE(7) | PULLUDEN | PULLUP_EN)}, /* (E16) UART0_TXD */
|
||||||
|
{-1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct module_pin_mux gnss_shield_netbird_pin_mux_i2c[] = {
|
||||||
|
{OFFSET(uart0_rxd), (MODE(3) | PULLUDDIS)}, /* (E15) UART0_RXD - I2C2_SDA */
|
||||||
|
{OFFSET(uart0_txd), (MODE(3) | PULLUDEN | PULLUP_EN)}, /* (E16) UART0_TXD - I2C_SCL */
|
||||||
|
{-1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static int request_gpios(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
debug("Shield configure gpios\n");
|
||||||
|
ret = shield_gpio_request_as_input(NETBIRD_GPIO_RST_SHIELD_N, "shield-rst");
|
||||||
|
if ((ret < 0))
|
||||||
|
return -1;
|
||||||
|
ret = shield_gpio_request_as_input(NETBIRD_GPIO_LATCH, "shield-load");
|
||||||
|
if ((ret < 0))
|
||||||
|
return -1;
|
||||||
|
/*
|
||||||
|
ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_0, "shield-mode0");
|
||||||
|
if ((ret < 0))
|
||||||
|
return -1;
|
||||||
|
*/
|
||||||
|
ret = shield_gpio_request_as_input(NETBIRD_GPIO_MODE_1, "shield-mode1");
|
||||||
|
if ((ret < 0))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
shield_slot_initialized = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int configure_can_termination(int termination)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
|
||||||
|
debug ("Set can termination to %d\n", termination);
|
||||||
|
|
||||||
|
if (!shield_slot_initialized) {
|
||||||
|
if (request_gpios()) {
|
||||||
|
puts("Failed to request gpios\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
debug("Configure shield pin muxing for configuration\n");
|
||||||
|
configure_module_pin_mux(can_shield_netbird_pin_mux_config);
|
||||||
|
|
||||||
|
debug("Make sure shield module is in reset\n");
|
||||||
|
ret = gpio_direction_output(NETBIRD_GPIO_RST_SHIELD_N, 0);
|
||||||
|
if (ret < 0) {
|
||||||
|
puts("Can not set shield-rst as output\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Set latch to high\n");
|
||||||
|
ret = gpio_direction_output(NETBIRD_GPIO_LATCH, 1);
|
||||||
|
if (ret < 0) {
|
||||||
|
puts("Can not set shield-load as output\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Write termination to GPIOs\n");
|
||||||
|
/*
|
||||||
|
ret = gpio_direction_output(NETBIRD_GPIO_MODE_0, mode & 0x01);
|
||||||
|
if (ret < 0) {
|
||||||
|
puts("Can not set shield-mode0 as output\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
ret = gpio_direction_output(NETBIRD_GPIO_MODE_1, termination);
|
||||||
|
if (ret < 0) {
|
||||||
|
puts("Can not set shield-mode1 as output\n"); ///////////////// 1
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Set latch to low\n");
|
||||||
|
gpio_set_value(NETBIRD_GPIO_LATCH, 0);
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Set mode0 and mode1 to highz again\n");
|
||||||
|
/* ret = gpio_direction_input(NETBIRD_GPIO_MODE_0);
|
||||||
|
if ((ret < 0)) {
|
||||||
|
puts("Could not configure shield slot mode0 gpio as input\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
ret = gpio_direction_input(NETBIRD_GPIO_MODE_1);
|
||||||
|
if ((ret < 0)) {
|
||||||
|
puts("Could not configure shield slot mode1 gpio as input\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Take shield out of reset\n");
|
||||||
|
gpio_set_value(NETBIRD_GPIO_RST_SHIELD_N, 1);
|
||||||
|
udelay(10);
|
||||||
|
|
||||||
|
debug("Set final can shield muxing\n");
|
||||||
|
configure_module_pin_mux(can_shield_netbird_pin_mux_final);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get_termination(const char* termination)
|
||||||
|
{
|
||||||
|
if (strcmp("on", termination) == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (strcmp("off", termination) == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
debug ("Invalid termination mode %s (falling back to off)", termination);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int get_termination_from_args(char * const argv[], int argc)
|
||||||
|
{
|
||||||
|
int termination;
|
||||||
|
|
||||||
|
if(argc != 2){
|
||||||
|
debug("2 arguments are needed for can configuration\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (strcmp ("termination", argv[0])) {
|
||||||
|
debug("The only option for can is terminations\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
termination = get_termination(argv[1]);
|
||||||
|
if (termination < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Termination is inverse */
|
||||||
|
return !termination;
|
||||||
|
}
|
||||||
|
|
||||||
|
// shield gnss-can gnss-mode uart can termination off
|
||||||
|
static int set_shieldmode(char * const argv[], int argc)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
if (argc != 5) {
|
||||||
|
printf("Too few arguments for gnss-can\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp ("gnss-mode", argv[0])) {
|
||||||
|
printf("gnss can module want a gnss-mode\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ret = 0;//configure_gnss_mode(argv[1]);
|
||||||
|
if(ret != 0) return ret;
|
||||||
|
|
||||||
|
|
||||||
|
if (strcmp ("can", argv[2])) {
|
||||||
|
printf("gnss can module wants a gnss-mode\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
printf("configure_can_termination");
|
||||||
|
ret = configure_can_termination(get_termination_from_args(&argv[3], 2));
|
||||||
|
if(ret != 0) return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct shield_t gnss_can_shield = {
|
||||||
|
"gnss-can", set_shieldmode
|
||||||
|
};
|
||||||
|
|
||||||
|
void gnss_can_shield_init(void)
|
||||||
|
{
|
||||||
|
shield_register(&gnss_can_shield);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef SHIELD_GNSS_CAN_H
|
||||||
|
#define SHIELD_GNSS_CAN_H
|
||||||
|
|
||||||
|
int shield_gnss_can_init(void);
|
||||||
|
int shield_gnss_can_setmode(int mode);
|
||||||
|
|
||||||
|
void gnss_can_shield_init(void);
|
||||||
|
|
||||||
|
#endif // SHIELD_GNSS_CAN_H
|
||||||
|
|
@ -59,7 +59,7 @@
|
||||||
"load_addr=" LOAD_ADDR "\0" \
|
"load_addr=" LOAD_ADDR "\0" \
|
||||||
"root_part=1\0" /* Default root partition, overwritte in board file */ \
|
"root_part=1\0" /* Default root partition, overwritte in board file */ \
|
||||||
"defaultconsole=ttyS1\0" /* Default output console */ \
|
"defaultconsole=ttyS1\0" /* Default output console */ \
|
||||||
"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk0p$root_part rootfstype=ext4 console=$defaultconsole,115200 rootwait loglevel=4\0" \
|
"add_sd_bootargs=setenv bootargs $bootargs root=/dev/mmcblk1p$root_part rootfstype=ext4 console=$defaultconsole,115200 rootwait loglevel=4\0" \
|
||||||
"add_version_bootargs=setenv bootargs $bootargs\0" \
|
"add_version_bootargs=setenv bootargs $bootargs\0" \
|
||||||
"fdt_skip_update=yes\0" \
|
"fdt_skip_update=yes\0" \
|
||||||
"ethprime=cpsw\0" \
|
"ethprime=cpsw\0" \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue