[RESEND PATCH v2 3/9] mfd: rtsx: update PETXCFG address

2015-01-21 Thread micky_ching
From: Micky Ching PETXCFG is defined at 0xFF03, the old 0xFE49 not used any more. Signed-off-by: Micky Ching Acked-by: Lee Jones --- drivers/mfd/rts5227.c| 6 ++ drivers/mfd/rts5249.c| 6 ++ include/linux/mfd/rtsx_pci.h | 2 +- 3 files changed, 5 insertions(+), 9 delet

[PATCH v3 3/9] mfd: rtsx: update PETXCFG address

2015-02-24 Thread micky_ching
From: Micky Ching PETXCFG is defined at 0xFF03, the old 0xFE49 not used any more. Signed-off-by: Micky Ching Acked-by: Lee Jones --- drivers/mfd/rts5227.c| 6 ++ drivers/mfd/rts5249.c| 6 ++ include/linux/mfd/rtsx_pci.h | 2 +- 3 files changed, 5 insertions(+), 9 delet

[PATCH v3 1/9] mfd: rtsx: replace TAB by SPC after #define

2015-02-24 Thread micky_ching
From: Micky Ching Re-format coding-style, using uniform SPC after "#define" keyword instead of mixing using TAB and SPC. Signed-off-by: Micky Ching Acked-by: Lee Jones --- include/linux/mfd/rtsx_pci.h | 254 +-- 1 file changed, 127 insertions(+), 127 de

[PATCH v3 0/9] mfd: rtsx: add support for new rts524A and rts525A

2015-02-24 Thread micky_ching
From: Micky Ching 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.

[PATCH v3 4/9] mfd: rtsx: update driving settings

2015-02-24 Thread micky_ching
From: Micky Ching update card drive settings, This setting can be used for rts5249 rts524A and rts525A. Signed-off-by: Micky Ching Acked-by: Lee Jones --- drivers/mfd/rts5249.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/mfd/rts5249.c b/drivers/mfd

[PATCH v3 2/9] mfd: rtsx: place register address and values togather

2015-02-24 Thread micky_ching
From: Micky Ching 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 Acked-by: Lee Jones --- include/linux/mfd/rtsx_pci.h | 836 +++-

[PATCH v3 5/9] mfd: rtsx: update phy register

2015-02-24 Thread micky_ching
From: Micky Ching Update some phy register name and value for rts5249, the updated value makes chip more stable on some platform. Signed-off-by: Micky Ching --- drivers/mfd/rts5249.c| 29 +++- include/linux/mfd/rtsx_pci.h | 109 ++- 2 fi

[PATCH v3 8/9] mfd: rtsx: add support for rts525A

2015-02-24 Thread micky_ching
From: Micky Ching add support for new chip rts525A. Signed-off-by: Micky Ching --- 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 file

[PATCH v3 7/9] mfd: rtsx: add support for rts524A

2015-02-24 Thread micky_ching
From: Micky Ching add support for new chip rts524A. Signed-off-by: Micky Ching --- drivers/mfd/rts5249.c| 186 --- drivers/mfd/rtsx_pcr.c | 25 +- drivers/mfd/rtsx_pcr.h | 7 ++ include/linux/mfd/rtsx_pci.h | 132 ++

[PATCH v3 6/9] mfd: rtsx: remove LCTLR defination

2015-02-24 Thread micky_ching
From: Micky Ching 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 operation

[PATCH v3 9/9] mfd: rtsx: using pcr_dbg replace dev_dbg

2015-02-24 Thread micky_ching
From: Micky Ching 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 Acked-by: Lee Jones --- drivers/mfd/rtl8411.c | 11 +-- drivers/mfd/rts5209.c | 4 ++-- drivers/mfd/rts5227.c | 4 ++-- drivers

[PATCH] sdhci: rtsx: fix 64 BIT DMA quirks

2015-04-06 Thread micky_ching
From: Micky Ching rts5250 chip failed handle 64 bit ADMA for address below 4G. Add 64 BIT quirks to disable this feature. Signed-off-by: Micky Ching --- drivers/mmc/host/sdhci-pci.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c

[PATCH] mmc: rtsx: fix card poweroff bug

2013-10-16 Thread micky_ching
From: Micky Ching If the host driver removed while card in the slot, the host will not power off card power correctly. This bug is produced because host eject flag set before the last mmc_set_ios callback, we should set the eject flag after power off. Signed-off-by: Micky Ching --- drivers/mmc

[PATCH] memstick: rtsx: fix ms card data transfer bug

2013-10-29 Thread micky_ching
From: Micky Ching unlike mspro card, ms card use normal read/write mode for DMA data transfer. Signed-off-by: Micky Ching --- drivers/memstick/host/rtsx_pci_ms.c | 87 --- 1 file changed, 81 insertions(+), 6 deletions(-) diff --git a/drivers/memstick/host/rts

[PATCH] mfd: rtsx: add card reader rtl8402

2013-11-01 Thread micky_ching
From: Micky Ching Add card reader rtl8042, rtl8402 is much like rtl8411, so just add it to rtl8411.c Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 62 drivers/mfd/rtsx_pcr.c |5 drivers/mfd/rtsx_pcr.h |1 + 3 files chang

[PATCH] memstick: rtsx: fix ms card data transfer bug

2013-11-06 Thread micky_ching
From: Micky Ching This patch is used to add support for ms card. The main difference between ms card and mspro card is long data transfer mode. mspro card can use auto mode DMA for long data transfer, but ms can not use this mode, it should use normal mode DMA. The memstick core add support for

[PATCH 0/3] mfd: rtsx: Decrease driver size and add new device

2013-11-15 Thread micky_ching
From: Micky Ching With the recent added support request of yet another device, the burden of duplicated code was becoming a little messy. To rectify is, we init rtl8411-like chips to 8411 param first, then modify the different values according each chip. Lee Jones (2): mfd: rtsx: reduce code d

[PATCH 1/3] mfd: rtsx: reduce code duplication in rtl8411

2013-11-15 Thread micky_ching
From: Lee Jones in order to remove duplicated code in rtl8411, we make 8411 as the base init params, and other like-8411 chips will just change the different value with 8411, this can save some source code. Signed-off-by: Lee Jones Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 76

[PATCH 3/3] mfd: rtsx: Prevent 'used uninitialised' warnings

2013-11-15 Thread micky_ching
From: Lee Jones drivers/mfd/rtl8411.c: In function -F¡rtl8411_fetch_vendor_settings¢:-A drivers/mfd/rtl8411.c:58:7: warning: -F¡reg1¢ is used uninitialized in this function [-Wuninitialized]-A drivers/mfd/rtl8411.c: In function -F¡rtl8411b_fetch_vendor_settings¢:-A drivers/mfd/rtl8411.c:79

[PATCH 2/3] mfd: rtsx: add card reader rtl8402

2013-11-15 Thread micky_ching
From: Micky Ching Add card reader rtl8042, rtl8402 is much like rtl8411, so just add it to rtl8411.c Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 29 + drivers/mfd/rtsx_pcr.c |2 ++ 2 files changed, 31 insertions(+) diff --git a/drivers/mfd/rtl8411

[PATCH 1/2] mmc: rtsx: fix card poweroff bug

2013-11-19 Thread micky_ching
From: Micky Ching If the host driver removed while card in the slot, the host will not power off card power correctly. This bug is produced because host eject flag set before the last mmc_set_ios callback, we should set the eject flag after power off. Signed-off-by: Micky Ching --- drivers/mmc

[PATCH 2/2] mmc: rtsx: modify phase searching method for tunning

2013-11-19 Thread micky_ching
From: Micky Ching The new phase searching method is more concise and easier to understand. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 108 +++-- 1 file changed, 30 insertions(+), 78 deletions(-) diff --git a/drivers/mmc/host/rtsx_pci_sd

[PATCH 0/2] fix sd power bug and modify phase-searching method

2013-11-19 Thread micky_ching
From: Micky Ching If the driver removed while sd card still in the slot, the card power will not power down correctly, if we insert the driver module again, UHS card will not switch to UHS mode. This bug is fix in this patch. We use another phase search method for tuning, which looks more simple

[PATCH v2 2/2] mmc: rtsx: modify phase searching method for tunning

2013-11-20 Thread micky_ching
From: Micky Ching The new phase searching method is more concise and easier to understand. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 112 +++-- include/linux/mfd/rtsx_pci.h |3 +- 2 files changed, 34 insertions(+), 81 deletions

[PATCH v2 0/2] fix sd power bug and modify phase-searching method

2013-11-20 Thread micky_ching
From: Micky Ching If the driver removed while sd/mmc card still in the slot, the card power will not power down correctly, if we insert the driver module again, UHS card will not switch to UHS mode. This bug is fixed in this patch. We use another phase search method for tuning, which looks more

[PATCH v2 1/2] mmc: rtsx: fix card poweroff bug

2013-11-20 Thread micky_ching
From: Micky Ching If the host driver removed while card in the slot, the host will not power off card power correctly. This bug is produced because host eject flag set before the last mmc_set_ios callback, we should set the eject flag after power off. Signed-off-by: Micky Ching --- drivers/mmc

[PATCH v2] memstick: rtsx: fix ms card data transfer bug

2013-11-20 Thread micky_ching
From: Micky Ching This patch is used to add support for ms card. The main difference between ms card and mspro card is long data transfer mode. mspro card can use auto mode DMA for long data transfer, but ms can not use this mode, it should use normal mode DMA. The memstick core add support for

[PATCH v3 0/2] fix sd power bug and modify phase-searching method

2013-12-02 Thread micky_ching
From: Micky Ching If the driver removed while sd card still in the slot, the card power will not power down correctly, if we insert the driver module again, UHS card will not switch to UHS mode. This bug is fix in this patch. We use another phase search method for tuning, which looks more simple

[PATCH v3 2/2] mmc: rtsx: modify phase searching method for tuning

2013-12-02 Thread micky_ching
From: Micky Ching The new phase searching method is more concise and easier to understand. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 112 +++-- include/linux/mfd/rtsx_pci.h |2 +- 2 files changed, 33 insertions(+), 81 deletions

[PATCH v3 1/2] mmc: rtsx: fix card poweroff bug

2013-12-02 Thread micky_ching
From: Micky Ching If the host driver removed while card in the slot, the host will not power off card power correctly. This bug is produced because host eject flag set before the last mmc_set_ios callback, we should set the eject flag after power off. Signed-off-by: Micky Ching --- drivers/mmc

[PATCH v2 3/3] mfd: rtsx: prevent 'used uninitialised' warnings

2013-12-03 Thread micky_ching
From: Micky Ching drivers/mfd/rtl8411.c: In function 'rtl8411_fetch_vendor_settings': drivers/mfd/rtl8411.c:58:7: warning: 'reg1' is used uninitialized in this function [-Wuninitialized] drivers/mfd/rtl8411.c: In function 'rtl8411b_fetch_vendor_settings': drivers/mfd/rtl8411.c:79:7: warning: 're

[PATCH v2 2/3] mfd: rtsx: add card reader rtl8402

2013-12-03 Thread micky_ching
From: Micky Ching Add card reader rtl8042, rtl8402 is much like rtl8411, so just add it to rtl8411.c Signed-off-by: Lee Jones Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 33 + drivers/mfd/rtsx_pcr.c |5 + drivers/mfd/rtsx_pcr.h |1 + 3

[PATCH v2 1/3] mfd: rtsx: reduce code duplication in rtl8411

2013-12-03 Thread micky_ching
From: Micky Ching in order to remove duplicated code in rtl8411, we make 8411 as the base init params, and other like-8411 chips will just change the different value with 8411, this can save some source code. Signed-off-by: Lee Jones Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 6

[PATCH v2 0/3] mfd: rtsx: decrease driver size and add new device

2013-12-03 Thread micky_ching
From: Micky Ching With the recent added support request of yet another device, the burden of duplicated code was becoming a little messy. To rectify is, we init rtl8411-like chips to 8411 param first, then modify the different values according each chip. Micky Ching (3): mfd: rtsx: reduce code

[PATCH v3 2/2] mfd: rtsx: add card reader rtl8402

2013-12-16 Thread micky_ching
From: Micky Ching Add card reader rtl8042, rtl8402 is much like rtl8411, so just add it to rtl8411.c Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 28 drivers/mfd/rtsx_pcr.c |5 + drivers/mfd/rtsx_pcr.h |1 + 3 files changed, 30 insertions(+

[PATCH v3 0/2] mfd: rtsx: decrease driver size and add new device

2013-12-16 Thread micky_ching
From: Micky Ching With the recent added support request of yet another device, the burden of duplicated code was becoming a little messy. To rectify is, we init rtl8411-like chips to 8411 param first, then modify the different values according each chip. And rtl8402 is supported from this patch.

[PATCH v3 1/2] mfd: rtsx: reduce code duplication in rtl8411

2013-12-16 Thread micky_ching
From: Micky Ching in order to remove duplicated code in rtl8411, we make 8411 as the base init params, and other like-8411 chips will just change the different value with 8411, this can save some source code. Signed-off-by: Lee Jones Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 6

[PATCH v4 0/2] mfd: rtsx: decrease driver size and add new device

2013-12-17 Thread micky_ching
From: Micky Ching we add a macro to simplify setting pull control, and use a common init function to init the common params for 8411-like chips. at last we add support for rtl8402 chip. Micky Ching (2): mfd: rtsx: add set pull control macro and simplify rtl8411 mfd: rtsx: add support for car

[PATCH v4 1/2] mfd: rtsx: add set pull control macro and simplify rtl8411

2013-12-17 Thread micky_ching
From: Micky Ching add set pull control macro to reduce code for setting pull control, and use a common init function to reduce code for rtl8411.c. So this patch is used to just simplify code. Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 53 -

[PATCH v4 2/2] mfd: rtsx: add support for card reader rtl8402

2013-12-17 Thread micky_ching
From: Micky Ching rtl8402 is much like rtl8411, so just add it to rtl8411.c Signed-off-by: Micky Ching --- drivers/mfd/rtl8411.c | 44 drivers/mfd/rtsx_pcr.c |5 + drivers/mfd/rtsx_pcr.h |1 + 3 files changed, 46 insertions(+), 4 dele

[PATCH 1/3] mmc: rtsx: fix card poweroff bug

2014-01-08 Thread micky_ching
From: Micky Ching If the host driver removed while card in the slot, the host will not power off card power correctly. This bug is produced because host eject flag set before the last mmc_set_ios callback, we should set the eject flag after power off. Signed-off-by: Micky Ching --- drivers/mmc

[PATCH 2/3] mmc: rtsx: modify phase searching method for tuning

2014-01-08 Thread micky_ching
From: Micky Ching The new phase searching method is more concise and easier to understand. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 112 +++-- include/linux/mfd/rtsx_pci.h |2 +- 2 files changed, 33 insertions(+), 81 deletions

[PATCH 3/3] mmc: rtsx: add support for pre_req and post_req

2014-01-08 Thread micky_ching
From: Micky Ching Add support for non-blocking request, pre_req() runs dma_map_sg() and post_req() runs dma_unmap_sg(). This patch can increase card read/write speed, especially for high speed card and slow CPU(for some embedded platform). Users can get a great benefit from this patch. if CPU fr

[PATCH 0/3] mmc: rtsx: fix bug and support nonblocking request

2014-01-08 Thread micky_ching
From: Micky Ching First we fix the card poweroff bug: the card power is not shutdown when sd/mmc card removed, this will make UHS-card failed to running in high speed mode if we insert the card again. We offer a concise tuning searching method, it is much easier to read. At last we add support

[PATCH 0/2] mmc: rtsx: revert support for mmc async request

2014-04-28 Thread micky_ching
From: Micky Ching The commit have some problem, using mutex_unlock() in atomic context, spinlock deadlock, it is hard to fix these problem, and better to use a new method. So just remove it. The commit depends on the previous patch. And mainly fix some problem for the previous patch. So need r

[PATCH 1/2] mmc: rtsx: Revert "mmc: rtsx: modify error handle and remove smatch warnings"

2014-04-28 Thread micky_ching
From: Micky Ching This reverts commit 1f7b581b3ffcb2a8437397a02f4af89fa6934d08. The patch depend on commit c42deffd5b53c9e583d83c7964854ede2f12410d , but the previous patch was discard. So we have to delete the patch. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 119 +++

[PATCH 2/2] mmc: rtsx: Revert "mmc: rtsx: add support for pre_req and post_req"

2014-04-28 Thread micky_ching
From: Micky Ching This reverts commit c42deffd5b53c9e583d83c7964854ede2f12410d. commit did use mutex_unlock() in tasklet, but mutex_unlock() can't used in tasklet(atomic context). The driver need use mutex to avoid concurrency, so we can't use tasklet here, the patch need to be removed. The sp

[PATCH] memorystick: rtsx: add cancel_work when remove driver

2014-06-04 Thread micky_ching
From: Micky Ching Add cancel_work_sync() in rtsx_pci_ms_drv_remove(). Using cancel_work_sync() to cancel pending request handle work when remove driver. Signed-off-by: Micky Ching --- drivers/memstick/host/rtsx_pci_ms.c |1 + 1 file changed, 1 insertion(+) diff --git a/drivers/memstick/ho

[PATCH 2/2] mmc: rtsx: add support for async request

2014-06-06 Thread micky_ching
From: Micky Ching Add support for non-blocking request, pre_req() runs dma_map_sg() and post_req() runs dma_unmap_sg(). This patch can increase card read/write speed, especially for high speed card and slow speed CPU. Test on intel i3(800MHz - 2.3GHz) performance mode(2.3GHz), SD card clock 208M

[PATCH 0/2] mmc: rtsx: add support for async request

2014-06-06 Thread micky_ching
From: Micky Ching Add support for sd/mmc async request, which makes next request do dma_map_sg() while previous request transfering data. This behaviour can improve card io performance more than 10%. Since rtsx mfd driver only provide a single function for transfering data, so add three split fu

[PATCH 1/2] mfd: rtsx: add dma transfer function

2014-06-06 Thread micky_ching
From: Micky Ching rtsx driver using a single function for transfer data, dma map/unmap are placed in one fix function. We need map/unmap dma in different place(for mmc async driver), so add three function for dma map, dma transfer and dma unmap. Signed-off-by: Micky Ching --- drivers/mfd/rtsx_

[PATCH 0/2] mfd: rtsx: fix PM suspend for 5227 & 5249

2014-09-11 Thread micky_ching
From: Micky Ching This patch fix rts5227 and rts5249 suspend issue, when card reader resumed from suspend state, the power state should reset before send buffer command. The original not reset PM state first, so this will lead resume failed, and can not do anything more. Micky Ching (2): mfd:

[PATCH 1/2] mfd: rtsx: fix PM suspend for 5227

2014-09-11 Thread micky_ching
From: Micky Ching Fix rts5227 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/rts5227.c| 23 +++ include

[PATCH 2/2] mfd: rtsx: fix PM suspend for 5249

2014-09-11 Thread micky_ching
From: Micky Ching Fix rts5249 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/rts5249.c | 21 + 1 file changed,

[PATCH v2 1/2] mfd: rtsx: fix PM suspend for 5227

2014-09-11 Thread micky_ching
From: Micky Ching Fix rts5227 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/rts5227.c| 19 +++ include/lin

[PATCH v2 0/2] mfd: rtsx: fix PM suspend for 5227 & 5249

2014-09-11 Thread micky_ching
From: Micky Ching v2: using (err < 0) to check if a function failed, not using "if (err)" and "if (err < 0)" in mixing way. This patch fix rts5227 and rts5249 suspend issue, when card reader resumed from suspend state, the power state should reset before send buffer command. The original not res

[PATCH v2 2/2] mfd: rtsx: fix PM suspend for 5249

2014-09-11 Thread micky_ching
From: Micky Ching Fix rts5249 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/rts5249.c | 17 + 1 file changed, 17 i

[PATCH] mmc: rtsx: add card power off during probe

2014-09-11 Thread micky_ching
From: Roger Tseng Some platform have both UEFI driver and MFD/mmc driver, if entering linux while card in the slot, the card power is already on, and rtsx-mmc driver have no chance to make card power off. This will lead UHSI card failed to enter UHSI mode. It is hard to control the UEFI driver l

[PATCH] mfd: rtsx: fix PM suspend for 5227 & 5249

2014-09-17 Thread micky_ching
From: Micky Ching Fix rts5227&5249 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/rts5227.c| 19 +++ driver

[PATCH] mfd: rtsx: fix PM suspend for 5227 & 5249

2014-09-17 Thread micky_ching
From: Micky Ching Fix rts5227&5249 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/Makefile |2 +- drivers/mfd/rts5227.c

[PATCH v2] mfd: rtsx: fix PM suspend for 5227 & 5249

2014-10-09 Thread micky_ching
From: Micky Ching Fix rts5227&5249 failed send buffer cmd after suspend, PM_CTRL3 should reset before send any buffer cmd after suspend. Otherwise, buffer cmd will failed, this will lead resume fail. Signed-off-by: Micky Ching --- drivers/mfd/Makefile | 2 +- drivers/mfd/rts5227.c

[PATCH] mmc: rtsx: change phase searching method

2013-09-02 Thread micky_ching
From: Micky Ching The new phase searching method is more concise, and makes the code easier to understand. Signed-off-by: Micky Ching --- drivers/mmc/host/rtsx_pci_sdmmc.c | 107 +++-- 1 file changed, 30 insertions(+), 77 deletions(-) diff --git a/drivers/mmc/

<    1   2