mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
sunxi: rsb: Move rsb_set_device_mode() call to rsb_init()
It turns out that the device_mode_data is rsb specific, rather then slave specific, so integrate the rsb_set_device_mode() call into rsb_init(). Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Ian Campbell <ijc@hellion.org.uk>
This commit is contained in:
parent
d35488c735
commit
37d46dd3c4
4 changed files with 11 additions and 9 deletions
|
@ -16,6 +16,8 @@
|
||||||
#include <asm/arch/prcm.h>
|
#include <asm/arch/prcm.h>
|
||||||
#include <asm/arch/rsb.h>
|
#include <asm/arch/rsb.h>
|
||||||
|
|
||||||
|
static int rsb_set_device_mode(void);
|
||||||
|
|
||||||
static void rsb_cfg_io(void)
|
static void rsb_cfg_io(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MACH_SUN8I
|
#ifdef CONFIG_MACH_SUN8I
|
||||||
|
@ -53,7 +55,7 @@ static void rsb_set_clk(void)
|
||||||
writel((cd_odly << 8) | div, &rsb->ccr);
|
writel((cd_odly << 8) | div, &rsb->ccr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rsb_init(void)
|
int rsb_init(void)
|
||||||
{
|
{
|
||||||
struct sunxi_rsb_reg * const rsb =
|
struct sunxi_rsb_reg * const rsb =
|
||||||
(struct sunxi_rsb_reg *)SUNXI_RSB_BASE;
|
(struct sunxi_rsb_reg *)SUNXI_RSB_BASE;
|
||||||
|
@ -65,6 +67,8 @@ void rsb_init(void)
|
||||||
|
|
||||||
writel(RSB_CTRL_SOFT_RST, &rsb->ctrl);
|
writel(RSB_CTRL_SOFT_RST, &rsb->ctrl);
|
||||||
rsb_set_clk();
|
rsb_set_clk();
|
||||||
|
|
||||||
|
return rsb_set_device_mode();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rsb_await_trans(void)
|
static int rsb_await_trans(void)
|
||||||
|
@ -99,13 +103,14 @@ static int rsb_await_trans(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rsb_set_device_mode(u32 device_mode_data)
|
static int rsb_set_device_mode(void)
|
||||||
{
|
{
|
||||||
struct sunxi_rsb_reg * const rsb =
|
struct sunxi_rsb_reg * const rsb =
|
||||||
(struct sunxi_rsb_reg *)SUNXI_RSB_BASE;
|
(struct sunxi_rsb_reg *)SUNXI_RSB_BASE;
|
||||||
unsigned long tmo = timer_get_us() + 1000000;
|
unsigned long tmo = timer_get_us() + 1000000;
|
||||||
|
|
||||||
writel(RSB_DMCR_DEVICE_MODE_START | device_mode_data, &rsb->dmcr);
|
writel(RSB_DMCR_DEVICE_MODE_START | RSB_DMCR_DEVICE_MODE_DATA,
|
||||||
|
&rsb->dmcr);
|
||||||
|
|
||||||
while (readl(&rsb->dmcr) & RSB_DMCR_DEVICE_MODE_START) {
|
while (readl(&rsb->dmcr) & RSB_DMCR_DEVICE_MODE_START) {
|
||||||
if (timer_get_us() > tmo)
|
if (timer_get_us() > tmo)
|
||||||
|
|
|
@ -37,6 +37,7 @@ struct sunxi_rsb_reg {
|
||||||
#define RSB_STAT_TERR_INT (1 << 1)
|
#define RSB_STAT_TERR_INT (1 << 1)
|
||||||
#define RSB_STAT_LBSY_INT (1 << 2)
|
#define RSB_STAT_LBSY_INT (1 << 2)
|
||||||
|
|
||||||
|
#define RSB_DMCR_DEVICE_MODE_DATA 0x7c3e00
|
||||||
#define RSB_DMCR_DEVICE_MODE_START (1 << 31)
|
#define RSB_DMCR_DEVICE_MODE_START (1 << 31)
|
||||||
|
|
||||||
#define RSB_CMD_BYTE_WRITE 0x4e
|
#define RSB_CMD_BYTE_WRITE 0x4e
|
||||||
|
@ -46,8 +47,7 @@ struct sunxi_rsb_reg {
|
||||||
#define RSB_DEVADDR_RUNTIME_ADDR(x) ((x) << 16)
|
#define RSB_DEVADDR_RUNTIME_ADDR(x) ((x) << 16)
|
||||||
#define RSB_DEVADDR_DEVICE_ADDR(x) ((x) << 0)
|
#define RSB_DEVADDR_DEVICE_ADDR(x) ((x) << 0)
|
||||||
|
|
||||||
void rsb_init(void);
|
int rsb_init(void);
|
||||||
int rsb_set_device_mode(u32 device_mode_data);
|
|
||||||
int rsb_set_device_address(u16 device_addr, u16 runtime_addr);
|
int rsb_set_device_address(u16 device_addr, u16 runtime_addr);
|
||||||
int rsb_write(const u16 runtime_device_addr, const u8 reg_addr, u8 data);
|
int rsb_write(const u16 runtime_device_addr, const u8 reg_addr, u8 data);
|
||||||
int rsb_read(const u16 runtime_device_addr, const u8 reg_addr, u8 *data);
|
int rsb_read(const u16 runtime_device_addr, const u8 reg_addr, u8 *data);
|
||||||
|
|
|
@ -29,9 +29,7 @@ static int pmic_bus_init(void)
|
||||||
#else
|
#else
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
rsb_init();
|
ret = rsb_init();
|
||||||
|
|
||||||
ret = rsb_set_device_mode(AXP223_DEVICE_MODE_DATA);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#define AXP223_DEVICE_ADDR 0x3a3
|
#define AXP223_DEVICE_ADDR 0x3a3
|
||||||
#define AXP223_RUNTIME_ADDR 0x2d
|
#define AXP223_RUNTIME_ADDR 0x2d
|
||||||
#define AXP223_DEVICE_MODE_DATA 0x7c3e00
|
|
||||||
|
|
||||||
/* Page 0 addresses */
|
/* Page 0 addresses */
|
||||||
#define AXP221_CHIP_ID 0x03
|
#define AXP221_CHIP_ID 0x03
|
||||||
|
|
Loading…
Reference in a new issue