13370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song/* 23370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * pinmux driver shared headfile for CSR SiRFsoc 33370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * 43370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. 53370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * 63370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * Licensed under GPLv2 or later. 73370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song */ 83370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 93370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#ifndef __PINMUX_SIRF_H__ 103370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define __PINMUX_SIRF_H__ 113370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 126a08a92ec45782e5543addf5f8785e2560a078f6Rong Wang#define SIRFSOC_NUM_PADS 622 136a08a92ec45782e5543addf5f8785e2560a078f6Rong Wang#define SIRFSOC_RSC_USB_UART_SHARE 0 146a08a92ec45782e5543addf5f8785e2560a078f6Rong Wang#define SIRFSOC_RSC_PIN_MUX 0x4 153370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 163370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_PAD_EN(g) ((g)*0x100 + 0x84) 173370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_PAD_EN_CLR(g) ((g)*0x100 + 0x90) 183370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTRL(g, i) ((g)*0x100 + (i)*4) 193370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_DSP_EN0 (0x80) 203370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_INT_STATUS(g) ((g)*0x100 + 0x8C) 213370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 223370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_INTR_LOW_MASK 0x1 233370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_INTR_HIGH_MASK 0x2 243370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_INTR_TYPE_MASK 0x4 253370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_INTR_EN_MASK 0x8 263370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_INTR_STS_MASK 0x10 273370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_OUT_EN_MASK 0x20 283370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_DATAOUT_MASK 0x40 293370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_DATAIN_MASK 0x80 303370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_PULL_MASK 0x100 313370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_PULL_HIGH 0x200 323370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_CTL_DSP_INT 0x400 333370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 343370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_NO_OF_BANKS 5 353370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_BANK_SIZE 32 363370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_GPIO_NUM(bank, index) (((bank)*(32)) + (index)) 373370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 383370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song/** 393370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * @dev: a pointer back to containing device 403370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * @virtbase: the offset to the controller in virtual memory 413370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song */ 423370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_pmx { 433370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song struct device *dev; 443370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song struct pinctrl_dev *pmx; 453370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song void __iomem *gpio_virtbase; 463370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song void __iomem *rsc_virtbase; 473370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song u32 gpio_regs[SIRFSOC_GPIO_NO_OF_BANKS][SIRFSOC_GPIO_BANK_SIZE]; 483370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song u32 ints_regs[SIRFSOC_GPIO_NO_OF_BANKS]; 493370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song u32 paden_regs[SIRFSOC_GPIO_NO_OF_BANKS]; 503370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song u32 dspen_regs; 513370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song u32 rsc_regs[3]; 523370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song bool is_marco; 533370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 543370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 553370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song/* SIRFSOC_GPIO_PAD_EN set */ 563370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_muxmask { 573370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song unsigned long group; 583370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song unsigned long mask; 593370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 603370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 613370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_padmux { 623370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song unsigned long muxmask_counts; 633370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const struct sirfsoc_muxmask *muxmask; 643370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song /* RSC_PIN_MUX set */ 656a08a92ec45782e5543addf5f8785e2560a078f6Rong Wang unsigned long ctrlreg; 663370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song unsigned long funcmask; 673370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song unsigned long funcval; 683370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 693370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 703370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song /** 713370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * struct sirfsoc_pin_group - describes a SiRFprimaII pin group 723370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * @name: the name of this specific pin group 733370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * @pins: an array of discrete physical pins used in this group, taken 743370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * from the driver-local pin enumeration space 753370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * @num_pins: the number of pins in this group array, i.e. the number of 763370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song * elements in .pins so we can iterate over that array 773370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song */ 783370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_pin_group { 793370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const char *name; 803370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const unsigned int *pins; 813370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const unsigned num_pins; 823370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 833370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 843370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_PIN_GROUP(n, p) \ 853370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song { \ 863370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .name = n, \ 873370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .pins = p, \ 883370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .num_pins = ARRAY_SIZE(p), \ 893370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song } 903370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 913370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_pmx_func { 923370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const char *name; 933370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const char * const *groups; 943370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const unsigned num_groups; 953370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song const struct sirfsoc_padmux *padmux; 963370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 973370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 983370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#define SIRFSOC_PMX_FUNCTION(n, g, m) \ 993370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song { \ 1003370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .name = n, \ 1013370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .groups = g, \ 1023370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .num_groups = ARRAY_SIZE(g), \ 1033370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song .padmux = &m, \ 1043370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song } 1053370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 1063370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songstruct sirfsoc_pinctrl_data { 1073370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song struct pinctrl_pin_desc *pads; 1083370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song int pads_cnt; 1093370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song struct sirfsoc_pin_group *grps; 1103370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song int grps_cnt; 1113370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song struct sirfsoc_pmx_func *funcs; 1123370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song int funcs_cnt; 1133370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song}; 1143370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 1153370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songextern struct sirfsoc_pinctrl_data prima2_pinctrl_data; 1163370dc916c90578107cc8485ac86e6d6dc81a88fBarry Songextern struct sirfsoc_pinctrl_data atlas6_pinctrl_data; 1173370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song 1183370dc916c90578107cc8485ac86e6d6dc81a88fBarry Song#endif 119