Commit a67dc039 authored by Miguel Jimenez Lopez's avatar Miguel Jimenez Lopez

kernel: Changes for the new WR Starting Kit project.

- Update the IRQ mechanism to use an external VIC driver.
- Create SysCon fields in the spec_dev structure to remove old dependency with golden gateware.
- Call new SDB scan functionalities.
parent 36d7be2d
This diff is collapsed.
...@@ -47,25 +47,32 @@ static void dumpstruct(char *name, void *ptr, int size) ...@@ -47,25 +47,32 @@ static void dumpstruct(char *name, void *ptr, int size)
static void set_sda(struct fmc_device *fmc, int val) static void set_sda(struct fmc_device *fmc, int val)
{ {
struct spec_dev *spec = fmc->carrier_data;
unsigned long syscon_addr = spec->syscon_addr;
if (val) if (val)
fmc_writel(fmc, SYSC_GPSR_FMC_SDA, SYSC_REG_GPSR); fmc_writel(fmc, SYSC_GPSR_FMC_SDA, syscon_addr+SYSC_REG_GPSR);
else else
fmc_writel(fmc, SYSC_GPCR_FMC_SDA, SYSC_REG_GPCR); fmc_writel(fmc, SYSC_GPCR_FMC_SDA, syscon_addr+SYSC_REG_GPCR);
ndelay(1250); /* 400kHz -> 2.5us/loop */ ndelay(1250); /* 400kHz -> 2.5us/loop */
} }
static void set_scl(struct fmc_device *fmc, int val) static void set_scl(struct fmc_device *fmc, int val)
{ {
struct spec_dev *spec = fmc->carrier_data;
unsigned long syscon_addr = spec->syscon_addr;
if (val) if (val)
fmc_writel(fmc, SYSC_GPSR_FMC_SCL, SYSC_REG_GPSR); fmc_writel(fmc, SYSC_GPSR_FMC_SCL, syscon_addr+SYSC_REG_GPSR);
else else
fmc_writel(fmc, SYSC_GPCR_FMC_SCL, SYSC_REG_GPCR); fmc_writel(fmc, SYSC_GPCR_FMC_SCL, syscon_addr+SYSC_REG_GPCR);
ndelay(1250); /* 400kHz -> 2.5us/loop */ ndelay(1250); /* 400kHz -> 2.5us/loop */
} }
static int get_sda(struct fmc_device *fmc) static int get_sda(struct fmc_device *fmc)
{ {
return fmc_readl(fmc, SYSC_REG_GPSR) & SYSC_GPSR_FMC_SDA ? 1 : 0; struct spec_dev *spec = fmc->carrier_data;
unsigned long syscon_addr = spec->syscon_addr;
return fmc_readl(fmc, syscon_addr+SYSC_REG_GPSR) & SYSC_GPSR_FMC_SDA ? 1 : 0;
}; };
static void mi2c_start(struct fmc_device *fmc) static void mi2c_start(struct fmc_device *fmc)
......
...@@ -42,6 +42,8 @@ struct spec_dev { ...@@ -42,6 +42,8 @@ struct spec_dev {
char name[SPEC_NAME_LEN]; char name[SPEC_NAME_LEN];
unsigned int sdb_entry; unsigned int sdb_entry;
unsigned long syscon_addr;
unsigned long syscon_size;
}; };
#define SPEC_FLAG_FAKE_EEPROM 0x00000001 #define SPEC_FLAG_FAKE_EEPROM 0x00000001
...@@ -152,5 +154,8 @@ extern int spec_eeprom_write(struct fmc_device *fmc, uint32_t offset, ...@@ -152,5 +154,8 @@ extern int spec_eeprom_write(struct fmc_device *fmc, uint32_t offset,
extern int spec_gpio_init(struct fmc_device *fmc); extern int spec_gpio_init(struct fmc_device *fmc);
extern void spec_gpio_exit(struct fmc_device *fmc); extern void spec_gpio_exit(struct fmc_device *fmc);
/* Functions in spec-sdb-scan.c */
extern int spec_sdb_fpga_dev_register_all(struct fmc_device *fmc);
extern void spec_sdb_fpga_dev_release_all(struct fmc_device *fmc);
#endif /* __SPEC_H__ */ #endif /* __SPEC_H__ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment