[PATCH 3/3] Hal8188ERateAdaptive.c : Expression is always false because 'else if' condition matches previous condition at line 404.
else if at line 406 has the same condition as the else if at line 404. Signed-off-by : Ameen Ali ameenali...@gmail.com --- drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c index 3c651d5..944cf7b 100644 --- a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c +++ b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c @@ -403,7 +403,7 @@ static int odm_ARFBRefresh_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_inf pRaInfo-PTModeSS = 3; else if (pRaInfo-HighestRate 0x0b) pRaInfo-PTModeSS = 2; - else if (pRaInfo-HighestRate 0x0b) + else if (pRaInfo-HighestRate 0x5) pRaInfo-PTModeSS = 1; else pRaInfo-PTModeSS = 0; -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 2/2] iio: jsa1212: Constify struct regmap_config
The regmap_config struct may be const because it is not modified by the driver and regmap_init() accepts pointer to const. Signed-off-by: Krzysztof Kozlowski k.kozlow...@samsung.com --- drivers/iio/light/jsa1212.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/light/jsa1212.c b/drivers/iio/light/jsa1212.c index 29de7e7d9562..3a3af89beaf9 100644 --- a/drivers/iio/light/jsa1212.c +++ b/drivers/iio/light/jsa1212.c @@ -308,7 +308,7 @@ static bool jsa1212_is_volatile_reg(struct device *dev, unsigned int reg) } } -static struct regmap_config jsa1212_regmap_config = { +static const struct regmap_config jsa1212_regmap_config = { .name = JSA1212_REGMAP_NAME, .reg_bits = 8, .val_bits = 8, -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 1/2] staging:iio:hmc5843: Constify register tables and struct regmap_config
The regmap_access_table and regmap_config structures may be const because they are not modified by the driver and regmap_init() accepts pointer to const. Signed-off-by: Krzysztof Kozlowski k.kozlow...@samsung.com --- drivers/staging/iio/magnetometer/hmc5843_i2c.c | 8 drivers/staging/iio/magnetometer/hmc5843_spi.c | 8 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/staging/iio/magnetometer/hmc5843_i2c.c b/drivers/staging/iio/magnetometer/hmc5843_i2c.c index 6acd614cdbc6..8346cf81fc2e 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_i2c.c +++ b/drivers/staging/iio/magnetometer/hmc5843_i2c.c @@ -22,7 +22,7 @@ static const struct regmap_range hmc5843_readable_ranges[] = { regmap_reg_range(0, HMC5843_ID_END), }; -static struct regmap_access_table hmc5843_readable_table = { +static const struct regmap_access_table hmc5843_readable_table = { .yes_ranges = hmc5843_readable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), }; @@ -31,7 +31,7 @@ static const struct regmap_range hmc5843_writable_ranges[] = { regmap_reg_range(0, HMC5843_MODE_REG), }; -static struct regmap_access_table hmc5843_writable_table = { +static const struct regmap_access_table hmc5843_writable_table = { .yes_ranges = hmc5843_writable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), }; @@ -40,12 +40,12 @@ static const struct regmap_range hmc5843_volatile_ranges[] = { regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), }; -static struct regmap_access_table hmc5843_volatile_table = { +static const struct regmap_access_table hmc5843_volatile_table = { .yes_ranges = hmc5843_volatile_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), }; -static struct regmap_config hmc5843_i2c_regmap_config = { +static const struct regmap_config hmc5843_i2c_regmap_config = { .reg_bits = 8, .val_bits = 8, diff --git a/drivers/staging/iio/magnetometer/hmc5843_spi.c b/drivers/staging/iio/magnetometer/hmc5843_spi.c index 98c4b57101c9..8e658f736e1f 100644 --- a/drivers/staging/iio/magnetometer/hmc5843_spi.c +++ b/drivers/staging/iio/magnetometer/hmc5843_spi.c @@ -19,7 +19,7 @@ static const struct regmap_range hmc5843_readable_ranges[] = { regmap_reg_range(0, HMC5843_ID_END), }; -static struct regmap_access_table hmc5843_readable_table = { +static const struct regmap_access_table hmc5843_readable_table = { .yes_ranges = hmc5843_readable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), }; @@ -28,7 +28,7 @@ static const struct regmap_range hmc5843_writable_ranges[] = { regmap_reg_range(0, HMC5843_MODE_REG), }; -static struct regmap_access_table hmc5843_writable_table = { +static const struct regmap_access_table hmc5843_writable_table = { .yes_ranges = hmc5843_writable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), }; @@ -37,12 +37,12 @@ static const struct regmap_range hmc5843_volatile_ranges[] = { regmap_reg_range(HMC5843_DATA_OUT_MSB_REGS, HMC5843_STATUS_REG), }; -static struct regmap_access_table hmc5843_volatile_table = { +static const struct regmap_access_table hmc5843_volatile_table = { .yes_ranges = hmc5843_volatile_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_volatile_ranges), }; -static struct regmap_config hmc5843_spi_regmap_config = { +static const struct regmap_config hmc5843_spi_regmap_config = { .reg_bits = 8, .val_bits = 8, -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: comedi: vmk80xx: remove firmware version kernel messages
On 23/02/15 22:13, H Hartley Sweeten wrote: During the attach of this driver a couple commands are sent to the hardware with usb_bulk_msg() to read the firmware version information. This information is then dumped as dev_info() kernel messages. Thee messages are just added noise and don't effect the operation of the driver. For simplicity, remove the messages as well as the then unused functions vmk80xx_read_eeprom() and vmk80xx_check_data_link(). This also fixes an issue reported by coverity about an out-of-bounds write in vmk80xx_read_eeprom(). Reported-by: coverity (CID 711413) Signed-off-by: H Hartley Sweeten hswee...@visionengravers.com Cc: Ian Abbott abbo...@mev.co.uk Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- Originally posted as [PATCH 1/4] staging: comedi: vmk80xx: fix out-of-bounds write Ian Abbott has some comments on that patch. It's cleaner to just remove the kernel messages completely. drivers/staging/comedi/drivers/vmk80xx.c | 71 1 file changed, 71 deletions(-) Reviewed-by: Ian Abbott abbo...@mev.co.uk -- -=( Ian Abbott @ MEV Ltd.E-mail: abbo...@mev.co.uk )=- -=( Web: http://www.mev.co.uk/ )=- ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] staging: android: ion: fix wrong init of dma_buf_export_info
Fixes: 817bd7253291 (dma-buf: cleanup dma_buf_export() to make it easily extensible) Stupid copy-paste from me in the above patch leads to the following static checker warning: drivers/staging/android/ion/ion.c:1112 ion_share_dma_buf() error: potentially dereferencing uninitialized 'buffer'. drivers/staging/android/ion/ion.c 1103 struct dma_buf *ion_share_dma_buf(struct ion_client *client, 1104 struct ion_handle *handle) 1105 { 1106 struct ion_buffer *buffer; ^^ 1107 struct dma_buf *dmabuf; 1108 bool valid_handle; 1109 DEFINE_DMA_BUF_EXPORT_INFO(exp_info); 1110 exp_info.ops = dma_buf_ops; 1112 exp_info.size = buffer-size; ^^ 1113 exp_info.flags = O_RDWR; 1114 exp_info.priv = buffer; ^^ And here also. 1115 This patch corrects this stupidity. Reported-by: Dan Carpenter dan.carpen...@oracle.com Signed-off-by: Sumit Semwal sumit.sem...@linaro.org --- drivers/staging/android/ion/ion.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index a4297be8f12f..204860a36c29 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -1108,11 +1108,6 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, bool valid_handle; DEFINE_DMA_BUF_EXPORT_INFO(exp_info); - exp_info.ops = dma_buf_ops; - exp_info.size = buffer-size; - exp_info.flags = O_RDWR; - exp_info.priv = buffer; - mutex_lock(client-lock); valid_handle = ion_handle_validate(client, handle); if (!valid_handle) { @@ -1124,6 +1119,11 @@ struct dma_buf *ion_share_dma_buf(struct ion_client *client, ion_buffer_get(buffer); mutex_unlock(client-lock); + exp_info.ops = dma_buf_ops; + exp_info.size = buffer-size; + exp_info.flags = O_RDWR; + exp_info.priv = buffer; + dmabuf = dma_buf_export(exp_info); if (IS_ERR(dmabuf)) { ion_buffer_put(buffer); -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: comedi: comedi_isadma: fix stalled detect in comedi_isadma_disable_on_sample()
On 23/02/15 20:22, H Hartley Sweeten wrote: The stalled variable this function is used to detect if the DMA operation is stalled while trying to disable DMA on a full comedi sample. The reset of this variable should only occur when the remaining bytes of the DMA transfer does not equal the remaining bytes from the last check. Reported-by: coverity (CID 1271132) Signed-off-by: H Hartley Sweeten hswee...@visionengravers.com Cc: Ian Abbott abbo...@mev.co.uk Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- drivers/staging/comedi/drivers/comedi_isadma.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/comedi_isadma.c b/drivers/staging/comedi/drivers/comedi_isadma.c index dbdea71..e856f01 100644 --- a/drivers/staging/comedi/drivers/comedi_isadma.c +++ b/drivers/staging/comedi/drivers/comedi_isadma.c @@ -91,9 +91,10 @@ unsigned int comedi_isadma_disable_on_sample(unsigned int dma_chan, stalled++; if (stalled 10) break; + } else { + residue = new_residue; + stalled = 0; } - residue = new_residue; - stalled = 0; } return residue; } This fix applies to linux-4.0-rc1 too. Reviewed-by: Ian Abbott abbo...@mev.co.uk -- -=( Ian Abbott @ MEV Ltd.E-mail: abbo...@mev.co.uk )=- -=( Web: http://www.mev.co.uk/ )=- ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH v2 00/36] staging: comedi: cleanup 8254 timer code
On 23/02/15 21:57, H Hartley Sweeten wrote: This series introduces a new module. comedi_8254, to support the 8254 timer devices that are commonly found on data acquisition card. This module replaces the current support provided by the inline functions in 8253.h and consolidates the subdevice support code found in the comedi drivers. v2: fix some issues pointed out by Ian Abbott 1) Patches 1, 7, 12, 13, and 26 Fix a logic error in the use of the 'regshift' variable used in the comedi_8254 module to calculate the offsets for the registers. As Ian Abbott pointed out, the 'regshift' is used to account for gaps between the registers. The 'iosize' will automatically space the registers correctly (assuming no gaps). Example: Register offsets iosize regshift = 0 regshift = 1 regshift = 2 -- --- --- --- I8254_IO8 (1) 0x00 0x01 0x02 0x03 0x00 0x02 0x04 0x06 0x00 0x04 0x08 0x0c I8254_IO16 (2) 0x00 0x02 0x04 0x06 0x00 0x04 0x08 0x0c 0x00 0x08 0x10 0x18 I8254_IO32 (4) 0x00 0x04 0x08 0x0c 0x00 0x08 0x10 0x18 0x00 0x10 0x20 0x30 2) Patch 1 AND the return value of __i8254_read() with 0xff to ensure that the returned value is valid. H Hartley Sweeten (36): staging: comedi: comedi_8254: introduce module for 8254 timer support staging: comedi: add 'pacer' member to struct comedi_device staging: comedi: pcl812: convert driver to use the comedi_8254 module staging: comedi: pcl816: convert driver to use the comedi_8254 module staging: comedi: pcl818: convert driver to use the comedi_8254 module staging: comedi: pcl711: convert driver to use the comedi_8254 module staging: comedi: adl_pci9111: convert driver to use the comedi_8254 module staging: comedi: amplc_pci224: convert driver to use the comedi_8254 module staging: comedi: cb_pcidas: convert driver to use the comedi_8254 module staging: comedi: das800: convert driver to use the comedi_8254 module staging: comedi: das16m1: convert driver to use the comedi_8254 module staging: comedi: cb_das16_cs: convert driver to use the comedi_8254 module staging: comedi: adv_pci1710: convert driver to use the comedi_8254 module staging: comedi: amplc_pci230: convert driver to use the comedi_8254 module staging: comedi: das08: convert driver to use the comedi_8254 module staging: comedi: ni_at_ao: convert driver to use the comedi_8254 module staging: comedi: ni_at_a2150: convert driver to use the comedi_8254 module staging: comedi: das6402: convert driver to use the comedi_8254 module staging: comedi: das1800: convert driver to use the comedi_8254 module staging: comedi: adv_pci_dio: simplify counter subdevice I/O staging: comedi: adv_pci_dio: refactor 's8254' boardinfo staging: comedi: adv_pci_dio: convert driver to use the comedi_8254 module staging: comedi: me4000: convert driver to use the comedi_8254 module staging: comedi: cb_pcidas64: remove unnecessary include staging: comedi: das16: convert driver to use the comedi_8254 module staging: comedi: adl_pci9118: convert driver to use the comedi_8254 module staging: comedi: amplc_dio200_common: introduce DIO200_CLK_SEL() macro staging: comedi: amplc_dio200_common: introduce DIO200_GAT_SEL() macro staging: comedi: amplc_dio200_common: remove 'clk_sce_ofs' from struct dio200_subdev_8254 staging: comedi: amplc_dio200_common: remove 'gat_sce_ofs' from struct dio200_subdev_8254 staging: comedi: amplc_dio200_common: remove 'which' from struct dio200_subdev_8254 staging: comedi: amplc_dio200_common: remove unnecessary 'counter_number' checks staging: comedi: amplc_dio200_common: remove 'spinlock' from struct dio200_subdev_8254 staging: comedi: amplc_dio200_common: convert driver to use the comedi_8254 module staging: comedi: ni_labpc_common: convert driver to use the comedi_8254 module staging: comedi: 8253.h: remove unused header drivers/staging/comedi/Kconfig | 26 + drivers/staging/comedi/comedidev.h | 1 + drivers/staging/comedi/drivers.c | 2 + drivers/staging/comedi/drivers/8253.h | 347 --- drivers/staging/comedi/drivers/Makefile| 1 + drivers/staging/comedi/drivers/adl_pci9111.c | 39 +- drivers/staging/comedi/drivers/adl_pci9118.c | 93 +-- drivers/staging/comedi/drivers/adv_pci1710.c | 206 ++- drivers/staging/comedi/drivers/adv_pci_dio.c | 135 + .../staging/comedi/drivers/amplc_dio200_common.c | 304 +++--- drivers/staging/comedi/drivers/amplc_pci224.c | 34 +- drivers/staging/comedi/drivers/amplc_pci230.c | 47 +- drivers/staging/comedi/drivers/cb_das16_cs.c | 12 +- drivers/staging/comedi/drivers/cb_pcidas.c | 86 +--
Re: [PATCH v2 34/36] staging: comedi: amplc_dio200_common: convert driver to use the comedi_8254 module
On 23/02/15 21:58, H Hartley Sweeten wrote: Convert this driver to use the comedi_8254 module to provide the 8254 timer support. Add 'clock_src' and 'gate_src' members to the comedi_8254 data for convienence. Signed-off-by: H Hartley Sweeten hswee...@visionengravers.com Cc: Ian Abbott abbo...@mev.co.uk Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- v2: no change drivers/staging/comedi/Kconfig | 1 + .../staging/comedi/drivers/amplc_dio200_common.c | 263 ++--- drivers/staging/comedi/drivers/comedi_8254.h | 4 + 3 files changed, 72 insertions(+), 196 deletions(-) [snip] +static int dio200_subdev_8254_offset(struct comedi_device *dev, +struct comedi_subdevice *s) { - const struct dio200_board *board = dev-board_ptr; - struct dio200_subdev_8254 *subpriv = s-private; + struct comedi_8254 *i8254 = s-private; - if (!board-has_clk_gat_sce) - return -1; + if (dev-mmio) + return i8254-mmio - dev-mmio; - return subpriv-gate_src[counter_number]; + return i8254-iobase - dev-iobase; } -static int dio200_subdev_8254_set_clock_src(struct comedi_device *dev, +static void dio200_subdev_8254_set_gate_src(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned int counter_number, - unsigned int clock_src) + unsigned int chan, + unsigned int src) { - const struct dio200_board *board = dev-board_ptr; - struct dio200_subdev_8254 *subpriv = s-private; - unsigned char byte; + unsigned int offset = dio200_subdev_8254_offset(dev, s); - if (!board-has_clk_gat_sce) - return -1; - if (clock_src (board-is_pcie ? 31 : 7)) - return -1; - - subpriv-clock_src[counter_number] = clock_src; - byte = clk_sce((subpriv-ofs 2) 1, counter_number, clock_src); - dio200_write8(dev, DIO200_CLK_SCE(subpriv-ofs 3), byte); - - return 0; + dio200_write8(dev, DIO200_GAT_SCE(offset 3), + gat_sce((offset 2) 1, chan, src)); } -static int dio200_subdev_8254_get_clock_src(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int counter_number, - unsigned int *period_ns) +static void dio200_subdev_8254_set_clock_src(struct comedi_device *dev, +struct comedi_subdevice *s, +unsigned int chan, +unsigned int src) { - const struct dio200_board *board = dev-board_ptr; - struct dio200_subdev_8254 *subpriv = s-private; - unsigned clock_src; - - if (!board-has_clk_gat_sce) - return -1; + unsigned int offset = dio200_subdev_8254_offset(dev, s); - clock_src = subpriv-clock_src[counter_number]; - *period_ns = clock_period[clock_src]; - return clock_src; + dio200_write8(dev, DIO200_CLK_SCE(offset 3), + clk_sce((offset 2) 1, chan, src)); } [snip] @@ -686,28 +551,34 @@ static int dio200_subdev_8254_init(struct comedi_device *dev, unsigned int offset) { const struct dio200_board *board = dev-board_ptr; - struct dio200_subdev_8254 *subpriv; - unsigned int chan; + struct comedi_8254 *i8254; + unsigned int regshift; + int chan; - subpriv = comedi_alloc_spriv(s, sizeof(*subpriv)); - if (!subpriv) + regshift = (board-is_pcie) ? 3 : 0; + + if (dev-mmio) + i8254 = comedi_8254_mm_init(dev-mmio + offset, + 0, I8254_IO8, regshift); + else + i8254 = comedi_8254_init(dev-iobase + offset, +0, I8254_IO8, regshift); + if (!i8254) return -ENOMEM; - s-type = COMEDI_SUBD_COUNTER; - s-subdev_flags = SDF_WRITABLE | SDF_READABLE; - s-n_chan = 3; - s-maxdata = 0x; - s-insn_read = dio200_subdev_8254_read; - s-insn_write = dio200_subdev_8254_write; - s-insn_config = dio200_subdev_8254_config; + comedi_8254_subdevice_init(s, i8254); - subpriv-ofs = offset; + i8254-insn_config = dio200_subdev_8254_config; + + /* +* Set the runflag bit so that the core will autmatically +* kfree(s-private) when the driver is detached. +*/ + s-runflags |= COMEDI_SRF_FREE_SPRIV; /* Initialize channels. */ - for (chan = 0; chan 3; chan++) { - dio200_subdev_8254_set_mode(dev,
[PATCH] Staging: fbtft: fix style errors
From: Matteo Semenzato mattew8...@gmail.com This patch fixes the following errors: Code indent should use tabs where possible Space prohibited before that ',' Signed-off-by: Matteo Semenzato mattew8...@gmail.com --- drivers/staging/fbtft/fbtft-core.c | 2 +- drivers/staging/fbtft/fbtft.h | 8 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c index 37dcf7e..ac4287f 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c @@ -49,7 +49,7 @@ extern int fbtft_gamma_parse_str(struct fbtft_par *par, unsigned long *curves, const char *str, int size); static unsigned long debug; -module_param(debug, ulong , 0); +module_param(debug, ulong, 0); MODULE_PARM_DESC(debug, override device debug level); static bool dma = true; diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h index 0dbf3f9..36ecf02 100644 --- a/drivers/staging/fbtft/fbtft.h +++ b/drivers/staging/fbtft/fbtft.h @@ -326,8 +326,8 @@ static int fbtft_driver_remove_pdev(struct platform_device *pdev) \ } \ \ static const struct of_device_id dt_ids[] = { \ -{ .compatible = _compatible }, \ -{},\ + { .compatible = _compatible }, \ + {},\ }; \ \ MODULE_DEVICE_TABLE(of, dt_ids); \ @@ -337,7 +337,7 @@ static struct spi_driver fbtft_driver_spi_driver = { \ .driver = {\ .name = _name, \ .owner = THIS_MODULE, \ -.of_match_table = of_match_ptr(dt_ids),\ + .of_match_table = of_match_ptr(dt_ids),\ }, \ .probe = fbtft_driver_probe_spi, \ .remove = fbtft_driver_remove_spi, \ @@ -347,7 +347,7 @@ static struct platform_driver fbtft_driver_platform_driver = { \ .driver = {\ .name = _name, \ .owner = THIS_MODULE, \ -.of_match_table = of_match_ptr(dt_ids),\ + .of_match_table = of_match_ptr(dt_ids),\ }, \ .probe = fbtft_driver_probe_pdev, \ .remove = fbtft_driver_remove_pdev,\ -- 2.3.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] Staging: fbtft remove C99 style comments
From: Matteo Semenzato mattew8...@gmail.com This patch fixes the following error: Do not use C99 // comments Signed-off-by: Matteo Semenzato mattew8...@gmail.com --- drivers/staging/fbtft/fb_ssd1331.c | 30 +++--- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/staging/fbtft/fb_ssd1331.c b/drivers/staging/fbtft/fb_ssd1331.c index da7464f..cdb18b3 100644 --- a/drivers/staging/fbtft/fb_ssd1331.c +++ b/drivers/staging/fbtft/fb_ssd1331.c @@ -29,24 +29,24 @@ static int init_display(struct fbtft_par *par) write_reg(par, 0xae); /* Display Off */ write_reg(par, 0xa0, 0x70 | (par-bgr 2)); /* Set Colour Depth */ - write_reg(par, 0x72); // RGB colour + write_reg(par, 0x72); /* RGB colour */ write_reg(par, 0xa1, 0x00); /* Set Display Start Line */ write_reg(par, 0xa2, 0x00); /* Set Display Offset */ write_reg(par, 0xa4); /* NORMALDISPLAY */ - write_reg(par, 0xa8, 0x3f); // Set multiplex - write_reg(par, 0xad, 0x8e); // Set master - // write_reg(par, 0xb0, 0x0b); // Set power mode - write_reg(par, 0xb1, 0x31); // Precharge - write_reg(par, 0xb3, 0xf0); // Clock div - write_reg(par, 0x8a, 0x64); // Precharge A - write_reg(par, 0x8b, 0x78); // Precharge B - write_reg(par, 0x8c, 0x64); // Precharge C - write_reg(par, 0xbb, 0x3a); // Precharge level - write_reg(par, 0xbe, 0x3e); // vcomh - write_reg(par, 0x87, 0x06); // Master current - write_reg(par, 0x81, 0x91); // Contrast A - write_reg(par, 0x82, 0x50); // Contrast B - write_reg(par, 0x83, 0x7d); // Contrast C + write_reg(par, 0xa8, 0x3f); /* Set multiplex */ + write_reg(par, 0xad, 0x8e); /* Set master */ + /* write_reg(par, 0xb0, 0x0b); Set power mode */ + write_reg(par, 0xb1, 0x31); /* Precharge */ + write_reg(par, 0xb3, 0xf0); /* Clock div */ + write_reg(par, 0x8a, 0x64); /* Precharge A */ + write_reg(par, 0x8b, 0x78); /* Precharge B */ + write_reg(par, 0x8c, 0x64); /* Precharge C */ + write_reg(par, 0xbb, 0x3a); /* Precharge level */ + write_reg(par, 0xbe, 0x3e); /* vcomh */ + write_reg(par, 0x87, 0x06); /* Master current */ + write_reg(par, 0x81, 0x91); /* Contrast A */ + write_reg(par, 0x82, 0x50); /* Contrast B */ + write_reg(par, 0x83, 0x7d); /* Contrast C */ write_reg(par, 0xaf); /* Set Sleep Mode Display On */ return 0; -- 2.3.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
RE: [PATCH v2 34/36] staging: comedi: amplc_dio200_common: convert driver to use the comedi_8254 module
On Tuesday, February 24, 2015 6:20 AM, Ian Abbott wrote: On 23/02/15 21:58, H Hartley Sweeten wrote: Convert this driver to use the comedi_8254 module to provide the 8254 timer support. Add 'clock_src' and 'gate_src' members to the comedi_8254 data for convienence. Signed-off-by: H Hartley Sweeten hswee...@visionengravers.com Cc: Ian Abbott abbo...@mev.co.uk Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- v2: no change drivers/staging/comedi/Kconfig | 1 + .../staging/comedi/drivers/amplc_dio200_common.c | 263 ++--- drivers/staging/comedi/drivers/comedi_8254.h | 4 + 3 files changed, 72 insertions(+), 196 deletions(-) [snip] +static int dio200_subdev_8254_offset(struct comedi_device *dev, + struct comedi_subdevice *s) { -const struct dio200_board *board = dev-board_ptr; -struct dio200_subdev_8254 *subpriv = s-private; +struct comedi_8254 *i8254 = s-private; -if (!board-has_clk_gat_sce) -return -1; +if (dev-mmio) +return i8254-mmio - dev-mmio; -return subpriv-gate_src[counter_number]; +return i8254-iobase - dev-iobase; } -static int dio200_subdev_8254_set_clock_src(struct comedi_device *dev, +static void dio200_subdev_8254_set_gate_src(struct comedi_device *dev, struct comedi_subdevice *s, -unsigned int counter_number, -unsigned int clock_src) +unsigned int chan, +unsigned int src) { -const struct dio200_board *board = dev-board_ptr; -struct dio200_subdev_8254 *subpriv = s-private; -unsigned char byte; +unsigned int offset = dio200_subdev_8254_offset(dev, s); -if (!board-has_clk_gat_sce) -return -1; -if (clock_src (board-is_pcie ? 31 : 7)) -return -1; - -subpriv-clock_src[counter_number] = clock_src; -byte = clk_sce((subpriv-ofs 2) 1, counter_number, clock_src); -dio200_write8(dev, DIO200_CLK_SCE(subpriv-ofs 3), byte); - -return 0; +dio200_write8(dev, DIO200_GAT_SCE(offset 3), + gat_sce((offset 2) 1, chan, src)); } -static int dio200_subdev_8254_get_clock_src(struct comedi_device *dev, -struct comedi_subdevice *s, -unsigned int counter_number, -unsigned int *period_ns) +static void dio200_subdev_8254_set_clock_src(struct comedi_device *dev, + struct comedi_subdevice *s, + unsigned int chan, + unsigned int src) { -const struct dio200_board *board = dev-board_ptr; -struct dio200_subdev_8254 *subpriv = s-private; -unsigned clock_src; - -if (!board-has_clk_gat_sce) -return -1; +unsigned int offset = dio200_subdev_8254_offset(dev, s); -clock_src = subpriv-clock_src[counter_number]; -*period_ns = clock_period[clock_src]; -return clock_src; +dio200_write8(dev, DIO200_CLK_SCE(offset 3), + clk_sce((offset 2) 1, chan, src)); } [snip] @@ -686,28 +551,34 @@ static int dio200_subdev_8254_init(struct comedi_device *dev, unsigned int offset) { const struct dio200_board *board = dev-board_ptr; -struct dio200_subdev_8254 *subpriv; -unsigned int chan; +struct comedi_8254 *i8254; +unsigned int regshift; +int chan; -subpriv = comedi_alloc_spriv(s, sizeof(*subpriv)); -if (!subpriv) +regshift = (board-is_pcie) ? 3 : 0; + +if (dev-mmio) +i8254 = comedi_8254_mm_init(dev-mmio + offset, +0, I8254_IO8, regshift); +else +i8254 = comedi_8254_init(dev-iobase + offset, + 0, I8254_IO8, regshift); +if (!i8254) return -ENOMEM; -s-type = COMEDI_SUBD_COUNTER; -s-subdev_flags = SDF_WRITABLE | SDF_READABLE; -s-n_chan = 3; -s-maxdata = 0x; -s-insn_read = dio200_subdev_8254_read; -s-insn_write = dio200_subdev_8254_write; -s-insn_config = dio200_subdev_8254_config; +comedi_8254_subdevice_init(s, i8254); -subpriv-ofs = offset; +i8254-insn_config = dio200_subdev_8254_config; + +/* + * Set the runflag bit so that the core will autmatically + * kfree(s-private) when the driver is detached. + */ +s-runflags |= COMEDI_SRF_FREE_SPRIV; /* Initialize channels. */ -for (chan = 0; chan 3; chan++) { -dio200_subdev_8254_set_mode(dev, s, chan, -I8254_MODE0 |
[PATCH v3 34/36] staging: comedi: amplc_dio200_common: convert driver to use the comedi_8254 module
Convert this driver to use the comedi_8254 module to provide the 8254 timer support. Add 'clock_src' and 'gate_src' members to the comedi_8254 data for convienence. Signed-off-by: H Hartley Sweeten hswee...@visionengravers.com Cc: Ian Abbott abbo...@mev.co.uk Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- v3: As pointed out by Ian Abbott, fix the 'offset' used for the timer on PCIe boards. No change to the rest of the series. drivers/staging/comedi/Kconfig | 1 + .../staging/comedi/drivers/amplc_dio200_common.c | 295 +++-- drivers/staging/comedi/drivers/comedi_8254.h | 4 + 3 files changed, 99 insertions(+), 201 deletions(-) diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 6ee50b4..ebda03c 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -1275,6 +1275,7 @@ config COMEDI_KCOMEDILIB called kcomedilib. config COMEDI_AMPLC_DIO200 + select COMEDI_8254 tristate config COMEDI_AMPLC_PC236 diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 08dab1f..0101e92 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -26,7 +26,7 @@ #include amplc_dio200.h #include comedi_fc.h -#include 8253.h +#include comedi_8254.h #include 8255.h /* only for register defines */ /* 200 series registers */ @@ -97,12 +97,6 @@ static const unsigned int ts_clock_period[TS_CONFIG_MAX_CLK_SRC + 1] = { 100,/* 1 millisecond. */ }; -struct dio200_subdev_8254 { - unsigned int ofs; /* Counter base offset */ - unsigned int clock_src[3]; /* Current clock sources */ - unsigned int gate_src[3]; /* Current gate sources */ -}; - struct dio200_subdev_8255 { unsigned int ofs; /* DIO base offset */ }; @@ -169,6 +163,27 @@ static void dio200_write32(struct comedi_device *dev, outl(val, dev-iobase + offset); } +static unsigned int dio200_subdev_8254_offset(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + const struct dio200_board *board = dev-board_ptr; + struct comedi_8254 *i8254 = s-private; + unsigned int offset; + + /* get the offset that was passed to comedi_8254_*_init() */ + if (dev-mmio) + offset = i8254-mmio - dev-mmio; + else + offset = i8254-iobase - dev-iobase; + + /* remove the shift that was added for PCIe boards */ + if (board-is_pcie) + offset = 3; + + /* this offset now works for the dio200_{read,write} helpers */ + return offset; +} + static int dio200_subdev_intr_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, @@ -474,159 +489,26 @@ static irqreturn_t dio200_interrupt(int irq, void *d) return IRQ_RETVAL(handled); } -static unsigned int dio200_subdev_8254_read_chan(struct comedi_device *dev, -struct comedi_subdevice *s, -unsigned int chan) -{ - struct dio200_subdev_8254 *subpriv = s-private; - unsigned int val; - - /* latch counter */ - val = chan 6; - dio200_write8(dev, subpriv-ofs + i8254_control_reg, val); - /* read lsb, msb */ - val = dio200_read8(dev, subpriv-ofs + chan); - val += dio200_read8(dev, subpriv-ofs + chan) 8; - return val; -} - -static void dio200_subdev_8254_write_chan(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int chan, - unsigned int count) -{ - struct dio200_subdev_8254 *subpriv = s-private; - - /* write lsb, msb */ - dio200_write8(dev, subpriv-ofs + chan, count 0xff); - dio200_write8(dev, subpriv-ofs + chan, (count 8) 0xff); -} - -static void dio200_subdev_8254_set_mode(struct comedi_device *dev, - struct comedi_subdevice *s, - unsigned int chan, - unsigned int mode) -{ - struct dio200_subdev_8254 *subpriv = s-private; - unsigned int byte; - - byte = chan 6; - byte |= 0x30; /* access order: lsb, msb */ - byte |= (mode 0xf); /* counter mode and BCD|binary */ - dio200_write8(dev, subpriv-ofs + i8254_control_reg, byte); -} - -static unsigned int dio200_subdev_8254_status(struct comedi_device *dev, - struct comedi_subdevice *s, -
Re: [PATCH] Staging: wlan-ng: hfa384x: Added a new line to fix coding style issue
On Tue, Feb 24, 2015 at 05:53:55PM +, Daniel Lockyer wrote: Fixed a coding style issue. Signed-off-by: Daniel Lockyer thisisdaniellock...@gmail.com --- drivers/staging/wlan-ng/hfa384x.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 8f20910..3bb8c1b 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1166,6 +1166,7 @@ typedef struct hfa384x_usbctlx { CTLX_STATE state; /* Tracks running state */ struct completion done; + volatile int reapable; /* Food for the reaper task */ ctlx_cmdcb_t cmdcb; /* Async command callback */ What coding style issue does this fix? It looks wrong to me. thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] Staging: wlan-ng: hfa384x: Added a new line to fix coding style issue
Fixed a coding style issue. Signed-off-by: Daniel Lockyer thisisdaniellock...@gmail.com --- drivers/staging/wlan-ng/hfa384x.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 8f20910..3bb8c1b 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1166,6 +1166,7 @@ typedef struct hfa384x_usbctlx { CTLX_STATE state; /* Tracks running state */ struct completion done; + volatile int reapable; /* Food for the reaper task */ ctlx_cmdcb_t cmdcb; /* Async command callback */ -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: unisys: Rework Kconfig dependencies
On Sat, 2015-02-21 at 13:16 +0100, Jean Delvare wrote: Signed-off-by: Jean Delvare jdelv...@suse.de Cc: Benjamin Romer benjamin.ro...@unisys.com Cc: David Kershner david.kersh...@unisys.com Cc: Greg Kroah-Hartman gre...@linuxfoundation.org --- This is an humble proposal if you like it. I don't use the driver myself, I don't even know what it is for ;-) I like this idea a lot. Thanks!! :) -- Ben Signed-off-by: Benjamin Romer benjamin.ro...@unisys.com ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] Staging: wlan-ng: hfa384x: Added a new line to fix coding style issue
On Tue, Feb 24, 2015 at 09:56:39AM -0800, Greg KH wrote: On Tue, Feb 24, 2015 at 05:53:55PM +, Daniel Lockyer wrote: Fixed a coding style issue. Signed-off-by: Daniel Lockyer thisisdaniellock...@gmail.com --- drivers/staging/wlan-ng/hfa384x.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 8f20910..3bb8c1b 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1166,6 +1166,7 @@ typedef struct hfa384x_usbctlx { CTLX_STATE state; /* Tracks running state */ struct completion done; + volatile int reapable; /* Food for the reaper task */ ctlx_cmdcb_t cmdcb; /* Async command callback */ What coding style issue does this fix? It looks wrong to me. thanks, greg k-h I used checkpatch.pl on the file and it returns WARNING: Missing a blank line after declarations. I can't see anything specific in the CodingStyle file. Is this an error on checkpatch.pl's behalf? Thanks, Daniel L ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] Staging: wlan-ng: hfa384x: Added a new line to fix coding style issue
On Tue, Feb 24, 2015 at 07:15:11PM +, Daniel Lockyer wrote: On Tue, Feb 24, 2015 at 09:56:39AM -0800, Greg KH wrote: On Tue, Feb 24, 2015 at 05:53:55PM +, Daniel Lockyer wrote: Fixed a coding style issue. Signed-off-by: Daniel Lockyer thisisdaniellock...@gmail.com --- drivers/staging/wlan-ng/hfa384x.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 8f20910..3bb8c1b 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1166,6 +1166,7 @@ typedef struct hfa384x_usbctlx { CTLX_STATE state; /* Tracks running state */ struct completion done; + volatile int reapable; /* Food for the reaper task */ ctlx_cmdcb_t cmdcb; /* Async command callback */ What coding style issue does this fix? It looks wrong to me. thanks, greg k-h I used checkpatch.pl on the file and it returns WARNING: Missing a blank line after declarations. I can't see anything specific in the CodingStyle file. Is this an error on checkpatch.pl's behalf? Yes, older versions of checkpatch couldn't understand 'volatile', newer versions should properly tell you that you need to delete the line after reapable, not add one before. Use your brain when reading checkpatch results, it's not always the smartest thing, it's a perl script :) thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] Staging: wlan-ng: hfa384x: Added a new line to fix coding style issue
On Tue, Feb 24, 2015 at 11:21:37AM -0800, Greg KH wrote: On Tue, Feb 24, 2015 at 07:15:11PM +, Daniel Lockyer wrote: On Tue, Feb 24, 2015 at 09:56:39AM -0800, Greg KH wrote: On Tue, Feb 24, 2015 at 05:53:55PM +, Daniel Lockyer wrote: Fixed a coding style issue. Signed-off-by: Daniel Lockyer thisisdaniellock...@gmail.com --- drivers/staging/wlan-ng/hfa384x.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 8f20910..3bb8c1b 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -1166,6 +1166,7 @@ typedef struct hfa384x_usbctlx { CTLX_STATE state; /* Tracks running state */ struct completion done; + volatile int reapable; /* Food for the reaper task */ ctlx_cmdcb_t cmdcb; /* Async command callback */ What coding style issue does this fix? It looks wrong to me. thanks, greg k-h I used checkpatch.pl on the file and it returns WARNING: Missing a blank line after declarations. I can't see anything specific in the CodingStyle file. Is this an error on checkpatch.pl's behalf? Yes, older versions of checkpatch couldn't understand 'volatile', newer versions should properly tell you that you need to delete the line after reapable, not add one before. Use your brain when reading checkpatch results, it's not always the smartest thing, it's a perl script :) Ah okay, I understand now! This was my first time sending a patch, I'll check it out more carefully next time. :) Thanks for your help, Daniel ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v3 1/9] mfd: rtsx: replace TAB by SPC after #define
From: Micky Ching micky_ch...@realsil.com.cn Re-format coding-style, using uniform SPC after #define keyword instead of mixing using TAB and SPC. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- include/linux/mfd/rtsx_pci.h | 254 +-- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 0c12628..a9c2a14 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h @@ -175,9 +175,9 @@ /* CARD_SHARE_MODE */ #define CARD_SHARE_MASK0x0F #define CARD_SHARE_MULTI_LUN 0x00 -#defineCARD_SHARE_NORMAL 0x00 -#defineCARD_SHARE_48_SD0x04 -#defineCARD_SHARE_48_MS0x08 +#define CARD_SHARE_NORMAL 0x00 +#define CARD_SHARE_48_SD 0x04 +#define CARD_SHARE_48_MS 0x08 /* CARD_SHARE_MODE for barossa */ #define CARD_SHARE_BAROSSA_SD 0x01 #define CARD_SHARE_BAROSSA_MS 0x02 @@ -249,76 +249,76 @@ #define CD_AUTO_DISABLE0x40 /* SD_STAT1 */ -#defineSD_CRC7_ERR 0x80 -#defineSD_CRC16_ERR0x40 -#defineSD_CRC_WRITE_ERR0x20 -#defineSD_CRC_WRITE_ERR_MASK 0x1C -#defineGET_CRC_TIME_OUT0x02 -#defineSD_TUNING_COMPARE_ERR 0x01 +#define SD_CRC7_ERR0x80 +#define SD_CRC16_ERR 0x40 +#define SD_CRC_WRITE_ERR 0x20 +#define SD_CRC_WRITE_ERR_MASK 0x1C +#define GET_CRC_TIME_OUT 0x02 +#define SD_TUNING_COMPARE_ERR 0x01 /* SD_STAT2 */ -#defineSD_RSP_80CLK_TIMEOUT0x01 +#define SD_RSP_80CLK_TIMEOUT 0x01 /* SD_BUS_STAT */ -#defineSD_CLK_TOGGLE_EN0x80 -#defineSD_CLK_FORCE_STOP 0x40 -#defineSD_DAT3_STATUS 0x10 -#defineSD_DAT2_STATUS 0x08 -#defineSD_DAT1_STATUS 0x04 -#defineSD_DAT0_STATUS 0x02 -#defineSD_CMD_STATUS 0x01 +#define SD_CLK_TOGGLE_EN 0x80 +#define SD_CLK_FORCE_STOP 0x40 +#define SD_DAT3_STATUS 0x10 +#define SD_DAT2_STATUS 0x08 +#define SD_DAT1_STATUS 0x04 +#define SD_DAT0_STATUS 0x02 +#define SD_CMD_STATUS 0x01 /* SD_PAD_CTL */ -#defineSD_IO_USING_1V8 0x80 -#defineSD_IO_USING_3V3 0x7F -#defineTYPE_A_DRIVING 0x00 -#defineTYPE_B_DRIVING 0x01 -#defineTYPE_C_DRIVING 0x02 -#defineTYPE_D_DRIVING 0x03 +#define SD_IO_USING_1V80x80 +#define SD_IO_USING_3V30x7F +#define TYPE_A_DRIVING 0x00 +#define TYPE_B_DRIVING 0x01 +#define TYPE_C_DRIVING 0x02 +#define TYPE_D_DRIVING 0x03 /* SD_SAMPLE_POINT_CTL */ -#defineDDR_FIX_RX_DAT 0x00 -#defineDDR_VAR_RX_DAT 0x80 -#defineDDR_FIX_RX_DAT_EDGE 0x00 -#defineDDR_FIX_RX_DAT_14_DELAY 0x40 -#defineDDR_FIX_RX_CMD 0x00 -#defineDDR_VAR_RX_CMD 0x20 -#defineDDR_FIX_RX_CMD_POS_EDGE 0x00 -#defineDDR_FIX_RX_CMD_14_DELAY 0x10 -#defineSD20_RX_POS_EDGE0x00 -#defineSD20_RX_14_DELAY0x08 +#define DDR_FIX_RX_DAT 0x00 +#define DDR_VAR_RX_DAT 0x80 +#define DDR_FIX_RX_DAT_EDGE0x00 +#define DDR_FIX_RX_DAT_14_DELAY0x40 +#define DDR_FIX_RX_CMD 0x00 +#define DDR_VAR_RX_CMD 0x20 +#define DDR_FIX_RX_CMD_POS_EDGE0x00 +#define DDR_FIX_RX_CMD_14_DELAY0x10 +#define SD20_RX_POS_EDGE 0x00 +#define SD20_RX_14_DELAY 0x08 #define SD20_RX_SEL_MASK 0x08 /* SD_PUSH_POINT_CTL */ -#defineDDR_FIX_TX_CMD_DAT 0x00 -#defineDDR_VAR_TX_CMD_DAT 0x80 -#defineDDR_FIX_TX_DAT_14_TSU 0x00 -#defineDDR_FIX_TX_DAT_12_TSU 0x40 -#defineDDR_FIX_TX_CMD_NEG_EDGE 0x00 -#defineDDR_FIX_TX_CMD_14_AHEAD 0x20 -#defineSD20_TX_NEG_EDGE0x00 -#defineSD20_TX_14_AHEAD0x10 +#define DDR_FIX_TX_CMD_DAT 0x00 +#define DDR_VAR_TX_CMD_DAT 0x80 +#define DDR_FIX_TX_DAT_14_TSU 0x00 +#define DDR_FIX_TX_DAT_12_TSU 0x40 +#define DDR_FIX_TX_CMD_NEG_EDGE
[PATCH v3 3/9] mfd: rtsx: update PETXCFG address
From: Micky Ching micky_ch...@realsil.com.cn PETXCFG is defined at 0xFF03, the old 0xFE49 not used any more. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- drivers/mfd/rts5227.c| 6 ++ drivers/mfd/rts5249.c| 6 ++ include/linux/mfd/rtsx_pci.h | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/mfd/rts5227.c b/drivers/mfd/rts5227.c index 3240740..1f387d4 100644 --- a/drivers/mfd/rts5227.c +++ b/drivers/mfd/rts5227.c @@ -118,11 +118,9 @@ static int rts5227_extra_init_hw(struct rtsx_pcr *pcr) rts5227_fill_driving(pcr, OUTPUT_3V3); /* Configure force_clock_req */ if (pcr-flags PCR_REVERSE_SOCKET) - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, - AUTOLOAD_CFG_BASE + 3, 0xB8, 0xB8); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB8, 0xB8); else - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, - AUTOLOAD_CFG_BASE + 3, 0xB8, 0x88); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB8, 0x88); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CTRL3, 0x10, 0x00); return rtsx_pci_send_cmd(pcr, 100); diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index cf425cc..225ad55 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -116,11 +116,9 @@ static int rts5249_extra_init_hw(struct rtsx_pcr *pcr) /* Configure driving */ rts5249_fill_driving(pcr, OUTPUT_3V3); if (pcr-flags PCR_REVERSE_SOCKET) - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, - AUTOLOAD_CFG_BASE + 3, 0xB0, 0xB0); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0xB0); else - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, - AUTOLOAD_CFG_BASE + 3, 0xB0, 0x80); + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0x80); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CTRL3, 0x10, 0x00); return rtsx_pci_send_cmd(pcr, 100); diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index e81f2bb..87cff60 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h @@ -572,7 +572,6 @@ #define MSGTXDATA2 0xFE46 #define MSGTXDATA3 0xFE47 #define MSGTXCTL 0xFE48 -#define PETXCFG0xFE49 #define LTR_CTL0xFE4A #define OBFF_CFG 0xFE4C @@ -606,6 +605,7 @@ #define DUMMY_REG_RESET_0 0xFE90 #define AUTOLOAD_CFG_BASE 0xFF00 +#define PETXCFG0xFF03 #define PM_CTRL1 0xFF44 #define PM_CTRL2 0xFF45 -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v3 4/9] mfd: rtsx: update driving settings
From: Micky Ching micky_ch...@realsil.com.cn update card drive settings, This setting can be used for rts5249 rts524A and rts525A. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- drivers/mfd/rts5249.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index 225ad55..2fe2854 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -36,16 +36,16 @@ static u8 rts5249_get_ic_version(struct rtsx_pcr *pcr) static void rts5249_fill_driving(struct rtsx_pcr *pcr, u8 voltage) { u8 driving_3v3[4][3] = { - {0x11, 0x11, 0x11}, + {0x11, 0x11, 0x18}, {0x55, 0x55, 0x5C}, - {0x99, 0x99, 0x92}, - {0x99, 0x99, 0x92}, + {0xFF, 0xFF, 0xFF}, + {0x96, 0x96, 0x96}, }; u8 driving_1v8[4][3] = { + {0xC4, 0xC4, 0xC4}, {0x3C, 0x3C, 0x3C}, - {0xB3, 0xB3, 0xB3}, {0xFE, 0xFE, 0xFE}, - {0xC4, 0xC4, 0xC4}, + {0xB3, 0xB3, 0xB3}, }; u8 (*driving)[3], drive_sel; @@ -341,7 +341,7 @@ void rts5249_init_params(struct rtsx_pcr *pcr) pcr-flags = 0; pcr-card_drive_sel = RTSX_CARD_DRIVE_DEFAULT; - pcr-sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_C; + pcr-sd30_drive_sel_1v8 = CFG_DRIVER_TYPE_B; pcr-sd30_drive_sel_3v3 = CFG_DRIVER_TYPE_B; pcr-aspm_en = ASPM_L1_EN; pcr-tx_initial_phase = SET_CLOCK_PHASE(1, 29, 16); -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v3 2/9] mfd: rtsx: place register address and values togather
From: Micky Ching micky_ch...@realsil.com.cn It is more readable to place register address and values define togather. The values define add two leading space indicate belong to the register address defined above. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- include/linux/mfd/rtsx_pci.h | 836 +++ 1 file changed, 369 insertions(+), 467 deletions(-) diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index a9c2a14..e81f2bb 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h @@ -28,74 +28,72 @@ #define MAX_RW_REG_CNT 1024 -/* PCI Operation Register Address */ #define RTSX_HCBAR 0x00 #define RTSX_HCBCTLR 0x04 +#define STOP_CMD (0x01 28) +#define READ_REG_CMD 0 +#define WRITE_REG_CMD1 +#define CHECK_REG_CMD2 + #define RTSX_HDBAR 0x08 +#define SG_INT 0x04 +#define SG_END 0x02 +#define SG_VALID 0x01 +#define SG_NO_OP 0x00 +#define SG_TRANS_DATA(0x02 4) +#define SG_LINK_DESC (0x03 4) #define RTSX_HDBCTLR 0x0C +#define SDMA_MODE0x00 +#define ADMA_MODE(0x02 26) +#define STOP_DMA (0x01 28) +#define TRIG_DMA (0x01 31) + #define RTSX_HAIMR 0x10 -#define RTSX_BIPR 0x14 -#define RTSX_BIER 0x18 +#define HAIMR_TRANS_START(0x01 31) +#define HAIMR_READ 0x00 +#define HAIMR_WRITE (0x01 30) +#define HAIMR_READ_START (HAIMR_TRANS_START | HAIMR_READ) +#define HAIMR_WRITE_START(HAIMR_TRANS_START | HAIMR_WRITE) +#define HAIMR_TRANS_END (HAIMR_TRANS_START) -/* Host command buffer control register */ -#define STOP_CMD (0x01 28) - -/* Host data buffer control register */ -#define SDMA_MODE 0x00 -#define ADMA_MODE (0x02 26) -#define STOP_DMA (0x01 28) -#define TRIG_DMA (0x01 31) - -/* Host access internal memory register */ -#define HAIMR_TRANS_START (0x01 31) -#define HAIMR_READ 0x00 -#define HAIMR_WRITE(0x01 30) -#define HAIMR_READ_START (HAIMR_TRANS_START | HAIMR_READ) -#define HAIMR_WRITE_START (HAIMR_TRANS_START | HAIMR_WRITE) -#define HAIMR_TRANS_END(HAIMR_TRANS_START) - -/* Bus interrupt pending register */ -#define CMD_DONE_INT (1 31) -#define DATA_DONE_INT (1 30) -#define TRANS_OK_INT (1 29) -#define TRANS_FAIL_INT (1 28) -#define XD_INT (1 27) -#define MS_INT (1 26) -#define SD_INT (1 25) -#define GPIO0_INT (1 24) -#define OC_INT (1 23) -#define SD_WRITE_PROTECT (1 19) -#define XD_EXIST (1 18) -#define MS_EXIST (1 17) -#define SD_EXIST (1 16) -#define DELINK_INT GPIO0_INT -#define MS_OC_INT (1 23) -#define SD_OC_INT (1 22) +#define RTSX_BIPR 0x14 +#define CMD_DONE_INT (1 31) +#define DATA_DONE_INT(1 30) +#define TRANS_OK_INT (1 29) +#define TRANS_FAIL_INT (1 28) +#define XD_INT (1 27) +#define MS_INT (1 26) +#define SD_INT (1 25) +#define GPIO0_INT(1 24) +#define OC_INT (1 23) +#define SD_WRITE_PROTECT (1 19) +#define XD_EXIST (1 18) +#define MS_EXIST (1 17) +#define SD_EXIST (1 16) +#define DELINK_INT GPIO0_INT +#define MS_OC_INT(1 23) +#define SD_OC_INT(1 22) #define CARD_INT (XD_INT | MS_INT | SD_INT) #define NEED_COMPLETE_INT (DATA_DONE_INT | TRANS_OK_INT | TRANS_FAIL_INT) #define RTSX_INT (CMD_DONE_INT | NEED_COMPLETE_INT | \ CARD_INT | GPIO0_INT | OC_INT) - #define CARD_EXIST (XD_EXIST | MS_EXIST | SD_EXIST) -/* Bus interrupt enable register */ -#define CMD_DONE_INT_EN(1 31) -#define DATA_DONE_INT_EN (1 30) -#define TRANS_OK_INT_EN(1 29)
[PATCH v3 6/9] mfd: rtsx: remove LCTLR defination
From: Micky Ching micky_ch...@realsil.com.cn To enable/disable ASPM we should find LINK CONTROL register in PCI config space. All old chip use 0x80 address, but new chip may use another address, so we using pci_find_capability() to get LINK CONTROL address. rtsx_gops.c was removed, we consider to put some common operations to this file, but the actual thing is, only a group of chips are in common ops1, and another group of chips in common ops2, it is hard to decide put which ops into generic ops file. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- drivers/mfd/Makefile | 2 +- drivers/mfd/rts5227.c| 2 +- drivers/mfd/rts5249.c| 3 +-- drivers/mfd/rtsx_gops.c | 37 - drivers/mfd/rtsx_pcr.c | 22 +- include/linux/mfd/rtsx_pci.h | 10 +- 6 files changed, 21 insertions(+), 55 deletions(-) delete mode 100644 drivers/mfd/rtsx_gops.c diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 53467e2..2cd7e74 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -13,7 +13,7 @@ obj-$(CONFIG_MFD_CROS_EC) += cros_ec.o obj-$(CONFIG_MFD_CROS_EC_I2C) += cros_ec_i2c.o obj-$(CONFIG_MFD_CROS_EC_SPI) += cros_ec_spi.o -rtsx_pci-objs := rtsx_pcr.o rtsx_gops.o rts5209.o rts5229.o rtl8411.o rts5227.o rts5249.o +rtsx_pci-objs := rtsx_pcr.o rts5209.o rts5229.o rtl8411.o rts5227.o rts5249.o obj-$(CONFIG_MFD_RTSX_PCI) += rtsx_pci.o obj-$(CONFIG_MFD_RTSX_USB) += rtsx_usb.o diff --git a/drivers/mfd/rts5227.c b/drivers/mfd/rts5227.c index 1f387d4..0c02831 100644 --- a/drivers/mfd/rts5227.c +++ b/drivers/mfd/rts5227.c @@ -130,7 +130,7 @@ static int rts5227_optimize_phy(struct rtsx_pcr *pcr) { int err; - err = rtsx_gops_pm_reset(pcr); + err = rtsx_pci_write_register(pcr, PM_CTRL3, D3_DELINK_MODE_EN, 0x00); if (err 0) return err; diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index 8de8220..3c77058 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -119,7 +119,6 @@ static int rts5249_extra_init_hw(struct rtsx_pcr *pcr) rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0xB0); else rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PETXCFG, 0xB0, 0x80); - rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, PM_CTRL3, 0x10, 0x00); return rtsx_pci_send_cmd(pcr, 100); } @@ -128,7 +127,7 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) { int err; - err = rtsx_gops_pm_reset(pcr); + err = rtsx_pci_write_register(pcr, PM_CTRL3, D3_DELINK_MODE_EN, 0x00); if (err 0) return err; diff --git a/drivers/mfd/rtsx_gops.c b/drivers/mfd/rtsx_gops.c deleted file mode 100644 index b1a98c6..000 --- a/drivers/mfd/rtsx_gops.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Driver for Realtek PCI-Express card reader - * - * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, see http://www.gnu.org/licenses/. - * - * Author: - * Micky Ching micky_ch...@realsil.com.cn - */ - -#include linux/mfd/rtsx_pci.h -#include rtsx_pcr.h - -int rtsx_gops_pm_reset(struct rtsx_pcr *pcr) -{ - int err; - - /* init aspm */ - rtsx_pci_write_register(pcr, ASPM_FORCE_CTL, 0xFF, 0x00); - err = rtsx_pci_update_cfg_byte(pcr, LCTLR, ~LCTLR_ASPM_CTL_MASK, 0x00); - if (err 0) - return err; - - /* reset PM_CTRL3 before send buffer cmd */ - return rtsx_pci_write_register(pcr, PM_CTRL3, D3_DELINK_MODE_EN, 0x00); -} diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c index 30f7ca8..81b9c2c 100644 --- a/drivers/mfd/rtsx_pcr.c +++ b/drivers/mfd/rtsx_pcr.c @@ -63,6 +63,18 @@ static const struct pci_device_id rtsx_pci_ids[] = { MODULE_DEVICE_TABLE(pci, rtsx_pci_ids); +static inline void rtsx_pci_enable_aspm(struct rtsx_pcr *pcr) +{ + rtsx_pci_update_cfg_byte(pcr, pcr-pcie_cap + PCI_EXP_LNKCTL, + 0xFC, pcr-aspm_en); +} + +static inline void rtsx_pci_disable_aspm(struct rtsx_pcr *pcr) +{ + rtsx_pci_update_cfg_byte(pcr, pcr-pcie_cap + PCI_EXP_LNKCTL, + 0xFC, 0); +} + void rtsx_pci_start_run(struct rtsx_pcr *pcr) { /* If pci device removed, don't queue idle work any more */ @@ -75,7
[PATCH v3 9/9] mfd: rtsx: using pcr_dbg replace dev_dbg
From: Micky Ching micky_ch...@realsil.com.cn pcr_dbg is a wrapper of dev_dbg, which can save some code, and help to enable/disable debug message static. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn Acked-by: Lee Jones lee.jo...@linaro.org --- drivers/mfd/rtl8411.c | 11 +-- drivers/mfd/rts5209.c | 4 ++-- drivers/mfd/rts5227.c | 4 ++-- drivers/mfd/rts5229.c | 4 ++-- drivers/mfd/rts5249.c | 4 ++-- drivers/mfd/rtsx_pcr.c | 49 ++--- 6 files changed, 35 insertions(+), 41 deletions(-) diff --git a/drivers/mfd/rtl8411.c b/drivers/mfd/rtl8411.c index fdd34c8..b3ae659 100644 --- a/drivers/mfd/rtl8411.c +++ b/drivers/mfd/rtl8411.c @@ -53,7 +53,7 @@ static void rtl8411_fetch_vendor_settings(struct rtsx_pcr *pcr) u8 reg3 = 0; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg1); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg1); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg1); if (!rtsx_vendor_setting_valid(reg1)) return; @@ -65,7 +65,7 @@ static void rtl8411_fetch_vendor_settings(struct rtsx_pcr *pcr) pcr-card_drive_sel |= rtsx_reg_to_card_drive_sel(reg1); rtsx_pci_read_config_byte(pcr, PCR_SETTING_REG3, reg3); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG3, reg3); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG3, reg3); pcr-sd30_drive_sel_3v3 = rtl8411_reg_to_sd30_drive_sel_3v3(reg3); } @@ -74,7 +74,7 @@ static void rtl8411b_fetch_vendor_settings(struct rtsx_pcr *pcr) u32 reg = 0; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); if (!rtsx_vendor_setting_valid(reg)) return; @@ -260,9 +260,8 @@ static unsigned int rtl8411_cd_deglitch(struct rtsx_pcr *pcr) rtsx_pci_write_register(pcr, CARD_PWR_CTL, BPP_POWER_MASK, BPP_POWER_OFF); - dev_dbg((pcr-pci-dev), - After CD deglitch, card_exist = 0x%x\n, - card_exist); + pcr_dbg(pcr, After CD deglitch, card_exist = 0x%x\n, + card_exist); } if (card_exist MS_EXIST) { diff --git a/drivers/mfd/rts5209.c b/drivers/mfd/rts5209.c index cb04174..373e253 100644 --- a/drivers/mfd/rts5209.c +++ b/drivers/mfd/rts5209.c @@ -38,7 +38,7 @@ static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr) u32 reg; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); if (rts5209_vendor_setting1_valid(reg)) { if (rts5209_reg_check_ms_pmos(reg)) @@ -47,7 +47,7 @@ static void rts5209_fetch_vendor_settings(struct rtsx_pcr *pcr) } rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG2, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG2, reg); if (rts5209_vendor_setting2_valid(reg)) { pcr-sd30_drive_sel_1v8 = diff --git a/drivers/mfd/rts5227.c b/drivers/mfd/rts5227.c index 0c02831..ce012d7 100644 --- a/drivers/mfd/rts5227.c +++ b/drivers/mfd/rts5227.c @@ -63,7 +63,7 @@ static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr) u32 reg; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); if (!rtsx_vendor_setting_valid(reg)) return; @@ -74,7 +74,7 @@ static void rts5227_fetch_vendor_settings(struct rtsx_pcr *pcr) pcr-card_drive_sel |= rtsx_reg_to_card_drive_sel(reg); rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG2, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG2, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG2, reg); pcr-sd30_drive_sel_3v3 = rtsx_reg_to_sd30_drive_sel_3v3(reg); if (rtsx_reg_check_reverse_socket(reg)) pcr-flags |= PCR_REVERSE_SOCKET; diff --git a/drivers/mfd/rts5229.c b/drivers/mfd/rts5229.c index 6353f5d..ace4538 100644 --- a/drivers/mfd/rts5229.c +++ b/drivers/mfd/rts5229.c @@ -38,7 +38,7 @@ static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr) u32 reg; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg); - dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); + pcr_dbg(pcr, Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); if (!rtsx_vendor_setting_valid(reg)) return; @@ -50,7 +50,7 @@ static void rts5229_fetch_vendor_settings(struct rtsx_pcr *pcr)
[PATCH v3 7/9] mfd: rtsx: add support for rts524A
From: Micky Ching micky_ch...@realsil.com.cn add support for new chip rts524A. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn --- drivers/mfd/rts5249.c| 186 --- drivers/mfd/rtsx_pcr.c | 25 +- drivers/mfd/rtsx_pcr.h | 7 ++ include/linux/mfd/rtsx_pci.h | 132 +- 4 files changed, 318 insertions(+), 32 deletions(-) diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index 3c77058..32be803 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -65,15 +65,17 @@ static void rts5249_fill_driving(struct rtsx_pcr *pcr, u8 voltage) 0xFF, driving[drive_sel][2]); } -static void rts5249_fetch_vendor_settings(struct rtsx_pcr *pcr) +static void rtsx_base_fetch_vendor_settings(struct rtsx_pcr *pcr) { u32 reg; rtsx_pci_read_config_dword(pcr, PCR_SETTING_REG1, reg); dev_dbg((pcr-pci-dev), Cfg 0x%x: 0x%x\n, PCR_SETTING_REG1, reg); - if (!rtsx_vendor_setting_valid(reg)) + if (!rtsx_vendor_setting_valid(reg)) { + pcr_dbg(pcr, skip fetch vendor setting\n); return; + } pcr-aspm_en = rtsx_reg_to_aspm(reg); pcr-sd30_drive_sel_1v8 = rtsx_reg_to_sd30_drive_sel_1v8(reg); @@ -87,7 +89,7 @@ static void rts5249_fetch_vendor_settings(struct rtsx_pcr *pcr) pcr-flags |= PCR_REVERSE_SOCKET; } -static void rts5249_force_power_down(struct rtsx_pcr *pcr, u8 pm_state) +static void rtsx_base_force_power_down(struct rtsx_pcr *pcr, u8 pm_state) { /* Set relink_time to 0 */ rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 1, 0xFF, 0); @@ -95,7 +97,8 @@ static void rts5249_force_power_down(struct rtsx_pcr *pcr, u8 pm_state) rtsx_pci_write_register(pcr, AUTOLOAD_CFG_BASE + 3, 0x01, 0); if (pm_state == HOST_ENTER_S3) - rtsx_pci_write_register(pcr, PM_CTRL3, 0x10, 0x10); + rtsx_pci_write_register(pcr, pcr-reg_pm_ctrl3, + D3_DELINK_MODE_EN, D3_DELINK_MODE_EN); rtsx_pci_write_register(pcr, FPDCTL, 0x03, 0x03); } @@ -104,6 +107,8 @@ static int rts5249_extra_init_hw(struct rtsx_pcr *pcr) { rtsx_pci_init_cmd(pcr); + /* Rest L1SUB Config */ + rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, L1SUB_CONFIG3, 0xFF, 0x00); /* Configure GPIO as output */ rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, GPIO_CTL, 0x02, 0x02); /* Reset ASPM state to default value */ @@ -189,27 +194,27 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) PHY_TUNE_TUNED12 | PHY_TUNE_TUNEA12); } -static int rts5249_turn_on_led(struct rtsx_pcr *pcr) +static int rtsx_base_turn_on_led(struct rtsx_pcr *pcr) { return rtsx_pci_write_register(pcr, GPIO_CTL, 0x02, 0x02); } -static int rts5249_turn_off_led(struct rtsx_pcr *pcr) +static int rtsx_base_turn_off_led(struct rtsx_pcr *pcr) { return rtsx_pci_write_register(pcr, GPIO_CTL, 0x02, 0x00); } -static int rts5249_enable_auto_blink(struct rtsx_pcr *pcr) +static int rtsx_base_enable_auto_blink(struct rtsx_pcr *pcr) { return rtsx_pci_write_register(pcr, OLT_LED_CTL, 0x08, 0x08); } -static int rts5249_disable_auto_blink(struct rtsx_pcr *pcr) +static int rtsx_base_disable_auto_blink(struct rtsx_pcr *pcr) { return rtsx_pci_write_register(pcr, OLT_LED_CTL, 0x08, 0x00); } -static int rts5249_card_power_on(struct rtsx_pcr *pcr, int card) +static int rtsx_base_card_power_on(struct rtsx_pcr *pcr, int card) { int err; @@ -236,7 +241,7 @@ static int rts5249_card_power_on(struct rtsx_pcr *pcr, int card) return 0; } -static int rts5249_card_power_off(struct rtsx_pcr *pcr, int card) +static int rtsx_base_card_power_off(struct rtsx_pcr *pcr, int card) { rtsx_pci_init_cmd(pcr); rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_PWR_CTL, @@ -246,22 +251,35 @@ static int rts5249_card_power_off(struct rtsx_pcr *pcr, int card) return rtsx_pci_send_cmd(pcr, 100); } -static int rts5249_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) +static int rtsx_base_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) { int err; + u16 append; - if (voltage == OUTPUT_3V3) { - err = rtsx_pci_write_phy_register(pcr, PHY_TUNE, 0x4FC0 | 0x24); + switch (voltage) { + case OUTPUT_3V3: + err = rtsx_pci_update_phy(pcr, PHY_TUNE, PHY_TUNE_VOLTAGE_MASK, + PHY_TUNE_VOLTAGE_3V3); if (err 0) return err; - } else if (voltage == OUTPUT_1V8) { - err = rtsx_pci_write_phy_register(pcr, PHY_BACR, 0x3C02); + break; + case OUTPUT_1V8: + append = PHY_TUNE_D18_1V8; + if (CHK_PCI_PID(pcr, 0x5249)) { + err = rtsx_pci_update_phy(pcr, PHY_BACR, +
[PATCH v3 5/9] mfd: rtsx: update phy register
From: Micky Ching micky_ch...@realsil.com.cn Update some phy register name and value for rts5249, the updated value makes chip more stable on some platform. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn --- drivers/mfd/rts5249.c| 29 +++- include/linux/mfd/rtsx_pci.h | 109 ++- 2 files changed, 72 insertions(+), 66 deletions(-) diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index 2fe2854..8de8220 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -132,11 +132,12 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) if (err 0) return err; - err = rtsx_pci_write_phy_register(pcr, PHY_REG_REV, - PHY_REG_REV_RESV | PHY_REG_REV_RXIDLE_LATCHED | - PHY_REG_REV_P1_EN | PHY_REG_REV_RXIDLE_EN | - PHY_REG_REV_RX_PWST | PHY_REG_REV_CLKREQ_DLY_TIMER_1_0 | - PHY_REG_REV_STOP_CLKRD | PHY_REG_REV_STOP_CLKWR); + err = rtsx_pci_write_phy_register(pcr, PHY_REV, + PHY_REV_RESV | PHY_REV_RXIDLE_LATCHED | + PHY_REV_P1_EN | PHY_REV_RXIDLE_EN | + PHY_REV_CLKREQ_TX_EN | PHY_REV_RX_PWST | + PHY_REV_CLKREQ_DT_1_0 | PHY_REV_STOP_CLKRD | + PHY_REV_STOP_CLKWR); if (err 0) return err; @@ -147,19 +148,21 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) PHY_BPCR_IB_FILTER | PHY_BPCR_CMIRROR_EN); if (err 0) return err; + err = rtsx_pci_write_phy_register(pcr, PHY_PCR, PHY_PCR_FORCE_CODE | PHY_PCR_OOBS_CALI_50 | PHY_PCR_OOBS_VCM_08 | PHY_PCR_OOBS_SEN_90 | - PHY_PCR_RSSI_EN); + PHY_PCR_RSSI_EN | PHY_PCR_RX10K); if (err 0) return err; + err = rtsx_pci_write_phy_register(pcr, PHY_RCR2, PHY_RCR2_EMPHASE_EN | PHY_RCR2_NADJR | - PHY_RCR2_CDR_CP_10 | PHY_RCR2_CDR_SR_2 | - PHY_RCR2_FREQSEL_12 | PHY_RCR2_CPADJEN | - PHY_RCR2_CDR_SC_8 | PHY_RCR2_CALIB_LATE); + PHY_RCR2_CDR_SR_2 | PHY_RCR2_FREQSEL_12 | + PHY_RCR2_CDR_SC_12P | PHY_RCR2_CALIB_LATE); if (err 0) return err; + err = rtsx_pci_write_phy_register(pcr, PHY_FLD4, PHY_FLD4_FLDEN_SEL | PHY_FLD4_REQ_REF | PHY_FLD4_RXAMP_OFF | PHY_FLD4_REQ_ADDA | @@ -167,11 +170,12 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) PHY_FLD4_BER_CHK_EN); if (err 0) return err; - err = rtsx_pci_write_phy_register(pcr, PHY_RDR, PHY_RDR_RXDSEL_1_9); + err = rtsx_pci_write_phy_register(pcr, PHY_RDR, + PHY_RDR_RXDSEL_1_9 | PHY_SSC_AUTO_PWD); if (err 0) return err; err = rtsx_pci_write_phy_register(pcr, PHY_RCR1, - PHY_RCR1_ADP_TIME | PHY_RCR1_VCO_COARSE); + PHY_RCR1_ADP_TIME_4 | PHY_RCR1_VCO_COARSE); if (err 0) return err; err = rtsx_pci_write_phy_register(pcr, PHY_FLD3, @@ -179,10 +183,11 @@ static int rts5249_optimize_phy(struct rtsx_pcr *pcr) PHY_FLD3_RXDELINK); if (err 0) return err; + return rtsx_pci_write_phy_register(pcr, PHY_TUNE, PHY_TUNE_TUNEREF_1_0 | PHY_TUNE_VBGSEL_1252 | PHY_TUNE_SDBUS_33 | PHY_TUNE_TUNED18 | - PHY_TUNE_TUNED12); + PHY_TUNE_TUNED12 | PHY_TUNE_TUNEA12); } static int rts5249_turn_on_led(struct rtsx_pcr *pcr) diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 87cff60..0103210 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h @@ -630,16 +630,47 @@ /* Phy register */ #define PHY_PCR0x00 +#define PHY_PCR_FORCE_CODE 0xB000 +#define PHY_PCR_OOBS_CALI_50 0x0800 +#define PHY_PCR_OOBS_VCM_08 0x0200 +#define PHY_PCR_OOBS_SEN_90 0x0040 +#define PHY_PCR_RSSI_EN 0x0002 +#define PHY_PCR_RX10K0x0001 + #define PHY_RCR0 0x01 #define PHY_RCR1 0x02 +#define PHY_RCR1_ADP_TIME_4 0x0400 +#define PHY_RCR1_VCO_COARSE 0x001F + #define PHY_RCR2 0x03 +#define PHY_RCR2_EMPHASE_EN 0x8000 +#define PHY_RCR2_NADJR 0x4000 +#define PHY_RCR2_CDR_SR_20x0100 +#define PHY_RCR2_FREQSEL_12 0x0040 +#define PHY_RCR2_CDR_SC_12P 0x0010 +#define PHY_RCR2_CALIB_LATE 0x0002 + #define PHY_RTCR
[PATCH v3 8/9] mfd: rtsx: add support for rts525A
From: Micky Ching micky_ch...@realsil.com.cn add support for new chip rts525A. Signed-off-by: Micky Ching micky_ch...@realsil.com.cn --- drivers/mfd/rts5249.c| 103 +++ drivers/mfd/rtsx_pcr.c | 13 -- drivers/mfd/rtsx_pcr.h | 1 + include/linux/mfd/rtsx_pci.h | 15 +++ 4 files changed, 129 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/rts5249.c b/drivers/mfd/rts5249.c index 32be803..d1ff32f 100644 --- a/drivers/mfd/rts5249.c +++ b/drivers/mfd/rts5249.c @@ -487,3 +487,106 @@ void rts524a_init_params(struct rtsx_pcr *pcr) pcr-ops = rts524a_pcr_ops; } +static int rts525a_card_power_on(struct rtsx_pcr *pcr, int card) +{ + rtsx_pci_write_register(pcr, LDO_VCC_CFG1, + LDO_VCC_TUNE_MASK, LDO_VCC_3V3); + return rtsx_base_card_power_on(pcr, card); +} + +static int rts525a_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage) +{ + switch (voltage) { + case OUTPUT_3V3: + rtsx_pci_write_register(pcr, LDO_CONFIG2, + LDO_D3318_MASK, LDO_D3318_33V); + rtsx_pci_write_register(pcr, SD_PAD_CTL, SD_IO_USING_1V8, 0); + break; + case OUTPUT_1V8: + rtsx_pci_write_register(pcr, LDO_CONFIG2, + LDO_D3318_MASK, LDO_D3318_18V); + rtsx_pci_write_register(pcr, SD_PAD_CTL, SD_IO_USING_1V8, + SD_IO_USING_1V8); + break; + default: + return -EINVAL; + } + + rtsx_pci_init_cmd(pcr); + rts5249_fill_driving(pcr, voltage); + return rtsx_pci_send_cmd(pcr, 100); +} + +static int rts525a_optimize_phy(struct rtsx_pcr *pcr) +{ + int err; + + err = rtsx_pci_write_register(pcr, RTS524A_PM_CTRL3, + D3_DELINK_MODE_EN, 0x00); + if (err 0) + return err; + + rtsx_pci_write_phy_register(pcr, _PHY_FLD0, + _PHY_FLD0_CLK_REQ_20C | _PHY_FLD0_RX_IDLE_EN | + _PHY_FLD0_BIT_ERR_RSTN | _PHY_FLD0_BER_COUNT | + _PHY_FLD0_BER_TIMER | _PHY_FLD0_CHECK_EN); + + rtsx_pci_write_phy_register(pcr, _PHY_ANA03, + _PHY_ANA03_TIMER_MAX | _PHY_ANA03_OOBS_DEB_EN | + _PHY_CMU_DEBUG_EN); + + if (is_version(pcr, 0x525A, IC_VER_A)) + rtsx_pci_write_phy_register(pcr, _PHY_REV0, + _PHY_REV0_FILTER_OUT | _PHY_REV0_CDR_BYPASS_PFD | + _PHY_REV0_CDR_RX_IDLE_BYPASS); + + return 0; +} + +static int rts525a_extra_init_hw(struct rtsx_pcr *pcr) +{ + rts5249_extra_init_hw(pcr); + + rtsx_pci_write_register(pcr, PCLK_CTL, PCLK_MODE_SEL, PCLK_MODE_SEL); + if (is_version(pcr, 0x525A, IC_VER_A)) { + rtsx_pci_write_register(pcr, L1SUB_CONFIG2, + L1SUB_AUTO_CFG, L1SUB_AUTO_CFG); + rtsx_pci_write_register(pcr, RREF_CFG, + RREF_VBGSEL_MASK, RREF_VBGSEL_1V25); + rtsx_pci_write_register(pcr, LDO_VIO_CFG, + LDO_VIO_TUNE_MASK, LDO_VIO_1V7); + rtsx_pci_write_register(pcr, LDO_DV12S_CFG, + LDO_D12_TUNE_MASK, LDO_D12_TUNE_DF); + rtsx_pci_write_register(pcr, LDO_AV12S_CFG, + LDO_AV12S_TUNE_MASK, LDO_AV12S_TUNE_DF); + rtsx_pci_write_register(pcr, LDO_VCC_CFG0, + LDO_VCC_LMTVTH_MASK, LDO_VCC_LMTVTH_2A); + rtsx_pci_write_register(pcr, OOBS_CONFIG, + OOBS_AUTOK_DIS | OOBS_VAL_MASK, 0x89); + } + + return 0; +} + +static const struct pcr_ops rts525a_pcr_ops = { + .fetch_vendor_settings = rtsx_base_fetch_vendor_settings, + .extra_init_hw = rts525a_extra_init_hw, + .optimize_phy = rts525a_optimize_phy, + .turn_on_led = rtsx_base_turn_on_led, + .turn_off_led = rtsx_base_turn_off_led, + .enable_auto_blink = rtsx_base_enable_auto_blink, + .disable_auto_blink = rtsx_base_disable_auto_blink, + .card_power_on = rts525a_card_power_on, + .card_power_off = rtsx_base_card_power_off, + .switch_output_voltage = rts525a_switch_output_voltage, + .force_power_down = rtsx_base_force_power_down, +}; + +void rts525a_init_params(struct rtsx_pcr *pcr) +{ + rts5249_init_params(pcr); + + pcr-reg_pm_ctrl3 = RTS524A_PM_CTRL3; + pcr-ops = rts525a_pcr_ops; +} + diff --git a/drivers/mfd/rtsx_pcr.c b/drivers/mfd/rtsx_pcr.c index e6d97ad..433cb41 100644 --- a/drivers/mfd/rtsx_pcr.c +++ b/drivers/mfd/rtsx_pcr.c @@ -59,6 +59,7 @@ static const struct pci_device_id rtsx_pci_ids[] = { { PCI_DEVICE(0x10EC, 0x5287), PCI_CLASS_OTHERS 16, 0xFF }, { PCI_DEVICE(0x10EC, 0x5286), PCI_CLASS_OTHERS 16, 0xFF }, { PCI_DEVICE(0x10EC, 0x524A), PCI_CLASS_OTHERS 16, 0xFF }, + { PCI_DEVICE(0x10EC, 0x525A), PCI_CLASS_OTHERS 16, 0xFF },
[PATCH v3 0/9] mfd: rtsx: add support for new rts524A and rts525A
From: Micky Ching micky_ch...@realsil.com.cn v3: - define member pcr-reg_pm_ctrl3 for PM_CTRL3 address - update phy register without change the indent - define macro for switch output voltage resend: - add lee jones ack for some patch. v2: - remove debug info when access failed. - using macro list for phy register init. - rename function for multi chip prefix with rtsx_base_ - save pcie_cap offset when init chip, not calling pci_find_capacity() every time. - add pcr-ops: write_phy/read_phy for special chip. This patchset including re-format some coding-style and add two new chip rts524A and rts525A. Micky Ching (9): mfd: rtsx: replace TAB by SPC after #define mfd: rtsx: place register address and values togather mfd: rtsx: update PETXCFG address mfd: rtsx: update driving settings mfd: rtsx: update phy register mfd: rtsx: remove LCTLR defination mfd: rtsx: add support for rts524A mfd: rtsx: add support for rts525A mfd: rtsx: using pcr_dbg replace dev_dbg drivers/mfd/Makefile |2 +- drivers/mfd/rtl8411.c| 11 +- drivers/mfd/rts5209.c|4 +- drivers/mfd/rts5227.c| 12 +- drivers/mfd/rts5229.c|4 +- drivers/mfd/rts5249.c| 343 +++-- drivers/mfd/rtsx_gops.c | 37 -- drivers/mfd/rtsx_pcr.c | 109 +++-- drivers/mfd/rtsx_pcr.h |8 + include/linux/mfd/rtsx_pci.h | 1116 ++ 10 files changed, 961 insertions(+), 685 deletions(-) delete mode 100644 drivers/mfd/rtsx_gops.c -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [RESEND PATCH v2 7/9] mfd: rtsx: add support for rts524A
On Wed, 25 Feb 2015, 敬锐 wrote: On 02/16/2015 10:28 PM, Lee Jones wrote: +static int rts524a_optimize_phy(struct rtsx_pcr *pcr) +{ + int err; + + err = rtsx_pci_write_register(pcr, RTS524A_PM_CTRL3, + D3_DELINK_MODE_EN, 0x00); + if (err 0) + return err; + + rtsx_pci_write_phy_register(pcr, PHY_PCR, + PHY_PCR_FORCE_CODE | PHY_PCR_OOBS_CALI_50 | + PHY_PCR_OOBS_VCM_08 | PHY_PCR_OOBS_SEN_90 | PHY_PCR_RSSI_EN); + rtsx_pci_write_phy_register(pcr, PHY_SSCCR3, + PHY_SSCCR3_STEP_IN | PHY_SSCCR3_CHECK_DELAY); + + if (is_version(pcr, 0x524A, IC_VER_A)) { + rtsx_pci_write_phy_register(pcr, PHY_SSCCR3, + PHY_SSCCR3_STEP_IN | PHY_SSCCR3_CHECK_DELAY); + rtsx_pci_write_phy_register(pcr, PHY_SSCCR2, + PHY_SSCCR2_PLL_NCODE | PHY_SSCCR2_TIME0 | + PHY_SSCCR2_TIME2_WIDTH); + rtsx_pci_write_phy_register(pcr, PHY_ANA1A, + PHY_ANA1A_TXR_LOOPBACK | PHY_ANA1A_RXT_BIST | + PHY_ANA1A_TXR_BIST | PHY_ANA1A_REV); + rtsx_pci_write_phy_register(pcr, PHY_ANA1D, + PHY_ANA1D_DEBUG_ADDR); + rtsx_pci_write_phy_register(pcr, PHY_DIG1E, + PHY_DIG1E_REV | PHY_DIG1E_D0_X_D1 | + PHY_DIG1E_RX_ON_HOST | PHY_DIG1E_RCLK_REF_HOST | + PHY_DIG1E_RCLK_TX_EN_KEEP | + PHY_DIG1E_RCLK_TX_TERM_KEEP | + PHY_DIG1E_RCLK_RX_EIDLE_ON | PHY_DIG1E_TX_TERM_KEEP | + PHY_DIG1E_RX_TERM_KEEP | PHY_DIG1E_TX_EN_KEEP | + PHY_DIG1E_RX_EN_KEEP); + } + + rtsx_pci_write_phy_register(pcr, PHY_ANA08, + PHY_ANA08_RX_EQ_DCGAIN | PHY_ANA08_SEL_RX_EN | + PHY_ANA08_RX_EQ_VAL | PHY_ANA08_SCP | PHY_ANA08_SEL_IPI); To the uninitiated this function is mostly randomness. How about some nice comments to illuminate? I'm not clear with these setting either, it is used to fix some phy setting, the default phy setting it not stable on some special platform, so we have to modify them by driver, newer version of chip will change its default value to more stable configure, so some value is no need to setting for Version B/C... That doesn't help me in any way. Use the datasheet, look-up the values and insert a nice, succinct explanation of what you're doing and why it's required please. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 3/3] Hal8188ERateAdaptive.c : Expression is always false because 'else if' condition matches previous condition at line 404.
On Tue, Feb 24, 2015 at 11:00:31PM +0200, Ameen Ali wrote: else if at line 406 has the same condition as the else if at line 404. The changelog should really say why you think 0x5 is correct. Could you update and resend? regards, dan carpenter ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] staging: dgnc: use min_t instead of min
This fixes the following checkpatch.pl warnings: WARNING: min() should probably be min_t() --- drivers/staging/dgnc/dgnc_neo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/dgnc/dgnc_neo.c b/drivers/staging/dgnc/dgnc_neo.c index c9a8a98..1268aa9 100644 --- a/drivers/staging/dgnc/dgnc_neo.c +++ b/drivers/staging/dgnc/dgnc_neo.c @@ -1203,7 +1203,7 @@ static void neo_copy_data_from_uart_to_queue(struct channel_t *ch) * IBM pSeries platform. * 15 bytes max appears to be the magic number. */ - n = min((uint) n, (uint) 12); + n = min_t(uint, n, 12); /* * Since we are grabbing the linestatus register, which -- 1.9.1 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [RESEND PATCH v2 7/9] mfd: rtsx: add support for rts524A
On 02/16/2015 10:28 PM, Lee Jones wrote: +static int rts524a_optimize_phy(struct rtsx_pcr *pcr) +{ + int err; + + err = rtsx_pci_write_register(pcr, RTS524A_PM_CTRL3, + D3_DELINK_MODE_EN, 0x00); + if (err 0) + return err; + + rtsx_pci_write_phy_register(pcr, PHY_PCR, + PHY_PCR_FORCE_CODE | PHY_PCR_OOBS_CALI_50 | + PHY_PCR_OOBS_VCM_08 | PHY_PCR_OOBS_SEN_90 | PHY_PCR_RSSI_EN); + rtsx_pci_write_phy_register(pcr, PHY_SSCCR3, + PHY_SSCCR3_STEP_IN | PHY_SSCCR3_CHECK_DELAY); + + if (is_version(pcr, 0x524A, IC_VER_A)) { + rtsx_pci_write_phy_register(pcr, PHY_SSCCR3, + PHY_SSCCR3_STEP_IN | PHY_SSCCR3_CHECK_DELAY); + rtsx_pci_write_phy_register(pcr, PHY_SSCCR2, + PHY_SSCCR2_PLL_NCODE | PHY_SSCCR2_TIME0 | + PHY_SSCCR2_TIME2_WIDTH); + rtsx_pci_write_phy_register(pcr, PHY_ANA1A, + PHY_ANA1A_TXR_LOOPBACK | PHY_ANA1A_RXT_BIST | + PHY_ANA1A_TXR_BIST | PHY_ANA1A_REV); + rtsx_pci_write_phy_register(pcr, PHY_ANA1D, + PHY_ANA1D_DEBUG_ADDR); + rtsx_pci_write_phy_register(pcr, PHY_DIG1E, + PHY_DIG1E_REV | PHY_DIG1E_D0_X_D1 | + PHY_DIG1E_RX_ON_HOST | PHY_DIG1E_RCLK_REF_HOST | + PHY_DIG1E_RCLK_TX_EN_KEEP | + PHY_DIG1E_RCLK_TX_TERM_KEEP | + PHY_DIG1E_RCLK_RX_EIDLE_ON | PHY_DIG1E_TX_TERM_KEEP | + PHY_DIG1E_RX_TERM_KEEP | PHY_DIG1E_TX_EN_KEEP | + PHY_DIG1E_RX_EN_KEEP); + } + + rtsx_pci_write_phy_register(pcr, PHY_ANA08, + PHY_ANA08_RX_EQ_DCGAIN | PHY_ANA08_SEL_RX_EN | + PHY_ANA08_RX_EQ_VAL | PHY_ANA08_SCP | PHY_ANA08_SEL_IPI); To the uninitiated this function is mostly randomness. How about some nice comments to illuminate? I'm not clear with these setting either, it is used to fix some phy setting, the default phy setting it not stable on some special platform, so we have to modify them by driver, newer version of chip will change its default value to more stable configure, so some value is no need to setting for Version B/C... diff --git a/drivers/mfd/rtsx_pcr.h b/drivers/mfd/rtsx_pcr.h index fe2bbb6..e7daf6f 100644 --- a/drivers/mfd/rtsx_pcr.h +++ b/drivers/mfd/rtsx_pcr.h @@ -27,12 +27,19 @@ #define MIN_DIV_N_PCR 80 #define MAX_DIV_N_PCR 208 +#define RTS524A_PME_FORCE_CTL 0xFF78 +#define RTS524A_PM_CTRL30xFF7E + +int __rtsx_pci_write_phy_register(struct rtsx_pcr *pcr, u8 addr, u16 val); +int __rtsx_pci_read_phy_register(struct rtsx_pcr *pcr, u8 addr, u16 *val); + void rts5209_init_params(struct rtsx_pcr *pcr); void rts5229_init_params(struct rtsx_pcr *pcr); void rtl8411_init_params(struct rtsx_pcr *pcr); void rtl8402_init_params(struct rtsx_pcr *pcr); void rts5227_init_params(struct rtsx_pcr *pcr); void rts5249_init_params(struct rtsx_pcr *pcr); +void rts524a_init_params(struct rtsx_pcr *pcr); void rtl8411b_init_params(struct rtsx_pcr *pcr); static inline u8 map_sd_drive(int idx) diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 33cc63c..a392546 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h @@ -577,8 +577,16 @@ #define PCR_SETTING_REG1 0x724 @@ -729,6 +831,8 @@ struct pcr_handle { }; struct pcr_ops { +int (*write_phy)(struct rtsx_pcr *pcr, u8 addr, u16 val); +int (*read_phy)(struct rtsx_pcr *pcr, u8 addr, u16 *val); int (*extra_init_hw)(struct rtsx_pcr *pcr); int (*optimize_phy)(struct rtsx_pcr *pcr); int (*turn_on_led)(struct rtsx_pcr *pcr); @@ -830,6 +934,10 @@ struct rtsx_pcr { #define CHK_PCI_PID(pcr, pid) ((pcr)-pci-device == (pid)) #define PCI_VID(pcr) ((pcr)-pci-vendor) #define PCI_PID(pcr) ((pcr)-pci-device) +#define is_version(pcr, pid, ver) \ +(CHK_PCI_PID(pcr, pid) (pcr)-ic_version == (ver)) +#define pcr_dbg(pcr, fmt, arg...) \ +dev_dbg((pcr)-pci-dev, fmt, ##arg) #define SDR104_PHASE(val) ((val) 0xFF) #define SDR50_PHASE(val) (((val) 8) 0xFF) @@ -899,4 +1007,17 @@ static inline void rtsx_pci_write_be32(struct rtsx_pcr *pcr, u16 reg, u32 val) rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg + 3, 0xFF, val); } +static inline int rtsx_pci_update_phy(struct rtsx_pcr *pcr, u8 addr, +u16 mask, u16 append) +{ +int err; +u16 val; + +err = rtsx_pci_read_phy_register(pcr, addr, val); +if (err 0) +return err; + +return rtsx_pci_write_phy_register(pcr, addr, (val mask) | append);
[PATCH] comedi: Change error return code for if statement in the function, cb_pcimdas_ai_rinsn
This changes us using the incorrect error,-ETIMEOUT when checking if the channel we are allocating to on the device structure pointer passed to this function is greater then the maximum available channels for this device to the correct error for a channel being out of range,-ECHRNG. Signed-off-by: Nicholas Krause xerofo...@gmail.com --- drivers/staging/comedi/drivers/cb_pcimdas.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c index 70dd2c9..d91a6f3 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdas.c +++ b/drivers/staging/comedi/drivers/cb_pcimdas.c @@ -121,7 +121,7 @@ static int cb_pcimdas_ai_rinsn(struct comedi_device *dev, maxchans = s-n_chan; if (chan (maxchans - 1)) - return -ETIMEDOUT; /* *** Wrong error code. Fixme. */ + return -ECHRNG; /* configure for sw initiated read */ d = inb(devpriv-BADR3 + 5); -- 2.1.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: emxx_udc: Replace GFP_KERNEL with GFP_ATOMIC
On Fri, Feb 20, 2015 at 06:43:53PM +0530, Tapasweni Pathak wrote: To avoid deadlock, do not call blocking functions with spinlocks held. Replace GFP_KERNEL with GFP_ATOMIC, as the latter will fail if the pile doesn't have enough free pages but will not sleep and hence deadlock can be avoided. Found by Coccinelle. Signed-off-by: Tapasweni Pathak tapaswenipat...@gmail.com --- Is there any other way this can be fixed as it is better to avoid GFP_ATOMIC? No, this is fine, nice fix. thanks, greg k-h ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] drivers: staging: lustre: Fix space prohibited between function name and open parenthesis errors
Fix checkpatch.ph errors space prohibited between function name and open parenthesis in socklnd.h Signed-off-by: Adrien Descamps adrien.desca...@gmail.com --- .../staging/lustre/lnet/klnds/socklnd/socklnd.h| 130 ++--- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h index 03488d2..c54c995 100644 --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h @@ -406,7 +406,7 @@ ksocknal_route_mask(void) } static inline struct list_head * -ksocknal_nid2peerlist (lnet_nid_t nid) +ksocknal_nid2peerlist(lnet_nid_t nid) { unsigned int hash = ((unsigned int)nid) % ksocknal_data.ksnd_peer_hash_size; @@ -414,25 +414,25 @@ ksocknal_nid2peerlist (lnet_nid_t nid) } static inline void -ksocknal_conn_addref (ksock_conn_t *conn) +ksocknal_conn_addref(ksock_conn_t *conn) { - LASSERT (atomic_read(conn-ksnc_conn_refcount) 0); + LASSERT(atomic_read(conn-ksnc_conn_refcount) 0); atomic_inc(conn-ksnc_conn_refcount); } -extern void ksocknal_queue_zombie_conn (ksock_conn_t *conn); +extern void ksocknal_queue_zombie_conn(ksock_conn_t *conn); extern void ksocknal_finalize_zcreq(ksock_conn_t *conn); static inline void -ksocknal_conn_decref (ksock_conn_t *conn) +ksocknal_conn_decref(ksock_conn_t *conn) { - LASSERT (atomic_read(conn-ksnc_conn_refcount) 0); + LASSERT(atomic_read(conn-ksnc_conn_refcount) 0); if (atomic_dec_and_test(conn-ksnc_conn_refcount)) ksocknal_queue_zombie_conn(conn); } static inline int -ksocknal_connsock_addref (ksock_conn_t *conn) +ksocknal_connsock_addref(ksock_conn_t *conn) { int rc = -ESHUTDOWN; @@ -448,11 +448,11 @@ ksocknal_connsock_addref (ksock_conn_t *conn) } static inline void -ksocknal_connsock_decref (ksock_conn_t *conn) +ksocknal_connsock_decref(ksock_conn_t *conn) { - LASSERT (atomic_read(conn-ksnc_sock_refcount) 0); + LASSERT(atomic_read(conn-ksnc_sock_refcount) 0); if (atomic_dec_and_test(conn-ksnc_sock_refcount)) { - LASSERT (conn-ksnc_closing); + LASSERT(conn-ksnc_closing); libcfs_sock_release(conn-ksnc_sock); conn-ksnc_sock = NULL; ksocknal_finalize_zcreq(conn); @@ -460,61 +460,61 @@ ksocknal_connsock_decref (ksock_conn_t *conn) } static inline void -ksocknal_tx_addref (ksock_tx_t *tx) +ksocknal_tx_addref(ksock_tx_t *tx) { - LASSERT (atomic_read(tx-tx_refcount) 0); + LASSERT(atomic_read(tx-tx_refcount) 0); atomic_inc(tx-tx_refcount); } -extern void ksocknal_tx_prep (ksock_conn_t *, ksock_tx_t *tx); -extern void ksocknal_tx_done (lnet_ni_t *ni, ksock_tx_t *tx); +extern void ksocknal_tx_prep(ksock_conn_t *, ksock_tx_t *tx); +extern void ksocknal_tx_done(lnet_ni_t *ni, ksock_tx_t *tx); static inline void -ksocknal_tx_decref (ksock_tx_t *tx) +ksocknal_tx_decref(ksock_tx_t *tx) { - LASSERT (atomic_read(tx-tx_refcount) 0); + LASSERT(atomic_read(tx-tx_refcount) 0); if (atomic_dec_and_test(tx-tx_refcount)) ksocknal_tx_done(NULL, tx); } static inline void -ksocknal_route_addref (ksock_route_t *route) +ksocknal_route_addref(ksock_route_t *route) { - LASSERT (atomic_read(route-ksnr_refcount) 0); + LASSERT(atomic_read(route-ksnr_refcount) 0); atomic_inc(route-ksnr_refcount); } -extern void ksocknal_destroy_route (ksock_route_t *route); +extern void ksocknal_destroy_route(ksock_route_t *route); static inline void -ksocknal_route_decref (ksock_route_t *route) +ksocknal_route_decref(ksock_route_t *route) { - LASSERT (atomic_read (route-ksnr_refcount) 0); + LASSERT(atomic_read(route-ksnr_refcount) 0); if (atomic_dec_and_test(route-ksnr_refcount)) - ksocknal_destroy_route (route); + ksocknal_destroy_route(route); } static inline void -ksocknal_peer_addref (ksock_peer_t *peer) +ksocknal_peer_addref(ksock_peer_t *peer) { - LASSERT (atomic_read (peer-ksnp_refcount) 0); + LASSERT(atomic_read(peer-ksnp_refcount) 0); atomic_inc(peer-ksnp_refcount); } -extern void ksocknal_destroy_peer (ksock_peer_t *peer); +extern void ksocknal_destroy_peer(ksock_peer_t *peer); static inline void -ksocknal_peer_decref (ksock_peer_t *peer) +ksocknal_peer_decref(ksock_peer_t *peer) { - LASSERT (atomic_read (peer-ksnp_refcount) 0); + LASSERT(atomic_read(peer-ksnp_refcount) 0); if (atomic_dec_and_test(peer-ksnp_refcount)) - ksocknal_destroy_peer (peer); + ksocknal_destroy_peer(peer); } -int ksocknal_startup (lnet_ni_t *ni); -void ksocknal_shutdown (lnet_ni_t *ni); +int ksocknal_startup(lnet_ni_t *ni); +void ksocknal_shutdown(lnet_ni_t *ni); int ksocknal_ctl(lnet_ni_t *ni, unsigned int cmd, void