Skip to content

Commit

Permalink
add support for the Realtek RTS525A
Browse files Browse the repository at this point in the history
ok stsp
  • Loading branch information
jcs committed Sep 6, 2017
1 parent eca66a7 commit 2c295ed
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 25 deletions.
6 changes: 3 additions & 3 deletions share/man/man4/rtsx.4
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
.\" $OpenBSD: rtsx.4,v 1.9 2016/04/26 00:21:27 jsg Exp $
.\" $OpenBSD: rtsx.4,v 1.10 2017/09/06 13:07:38 jcs Exp $
.\"
.\" Theo de Raadt, 2006. Public Domain.
.\" Stefan Sperling, 2012. Public Domain.
.\"
.Dd $Mdocdate: April 26 2016 $
.Dd $Mdocdate: September 6 2017 $
.Dt RTSX 4
.Os
.Sh NAME
Expand All @@ -16,7 +16,7 @@
The
.Nm
driver provides support for the Realtek RTS5209, RTS5227, RTS5229,
RTS522A, RTS5249, RTL8402, RTL8411, and RTL8411B SD card readers.
RTS522A, RTS5249, RTS525A, RTL8402, RTL8411, and RTL8411B SD card readers.
.Pp
The
.Xr sdmmc 4
Expand Down
6 changes: 5 additions & 1 deletion sys/dev/ic/rtsx.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: rtsx.c,v 1.17 2016/05/06 08:17:13 kettenis Exp $ */
/* $OpenBSD: rtsx.c,v 1.18 2017/09/06 13:07:38 jcs Exp $ */

/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
Expand Down Expand Up @@ -463,6 +463,10 @@ rtsx_bus_power_on(struct rtsx_softc *sc)
{
u_int8_t enable3;

if (sc->flags & RTSX_F_525A)
rtsx_write(sc, RTSX_LDO_VCC_CFG1, RTSX_LDO_VCC_TUNE_MASK,
RTSX_LDO_VCC_3V3);

/* Select SD card. */
RTSX_WRITE(sc, RTSX_CARD_SELECT, RTSX_SD_MOD_SEL);
RTSX_WRITE(sc, RTSX_CARD_SHARE_MODE, RTSX_CARD_SHARE_48_SD);
Expand Down
10 changes: 9 additions & 1 deletion sys/dev/ic/rtsxreg.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: rtsxreg.h,v 1.3 2013/11/26 20:33:16 deraadt Exp $ */
/* $OpenBSD: rtsxreg.h,v 1.4 2017/09/06 13:07:38 jcs Exp $ */

/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
Expand Down Expand Up @@ -501,6 +501,14 @@

#define RTSX_DUMMY_REG 0xFE90

#define RTSX_LDO_VCC_CFG1 0xFF73
#define RTSX_LDO_VCC_REF_TUNE_MASK 0x30
#define RTSX_LDO_VCC_REF_1V2 0x20
#define RTSX_LDO_VCC_TUNE_MASK 0x07
#define RTSX_LDO_VCC_1V8 0x04
#define RTSX_LDO_VCC_3V3 0x07
#define RTSX_LDO_VCC_LMT_EN 0x08

#define RTSX_SG_INT 0x04
#define RTSX_SG_END 0x02
#define RTSX_SG_VALID 0x01
Expand Down
3 changes: 2 additions & 1 deletion sys/dev/ic/rtsxvar.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: rtsxvar.h,v 1.4 2015/04/28 07:55:13 stsp Exp $ */
/* $OpenBSD: rtsxvar.h,v 1.5 2017/09/06 13:07:38 jcs Exp $ */

/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
Expand Down Expand Up @@ -51,5 +51,6 @@ int rtsx_intr(void *);
#define RTSX_F_5209 0x04
#define RTSX_F_5229 0x08
#define RTSX_F_5229_TYPE_C 0x10
#define RTSX_F_525A 0x20

#endif
44 changes: 25 additions & 19 deletions sys/dev/pci/rtsx_pci.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: rtsx_pci.c,v 1.13 2016/04/26 00:21:27 jsg Exp $ */
/* $OpenBSD: rtsx_pci.c,v 1.14 2017/09/06 13:07:38 jcs Exp $ */

/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
Expand Down Expand Up @@ -27,7 +27,8 @@
#include <dev/ic/rtsxvar.h>
#include <dev/sdmmc/sdmmcvar.h>

#define RTSX_PCI_BAR 0x10
#define RTSX_PCI_BAR 0x10
#define RTSX_PCI_BAR_525A 0x14

struct rtsx_pci_softc {
struct rtsx_softc sc;
Expand Down Expand Up @@ -61,6 +62,7 @@ rtsx_pci_match(struct device *parent, void *match, void *aux)
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTS5229 ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTS522A ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTS5249 ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTS525A ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTL8402 ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTL8411 ||
PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_REALTEK_RTL8411B)
Expand All @@ -80,6 +82,7 @@ rtsx_pci_attach(struct device *parent, struct device *self, void *aux)
bus_space_handle_t ioh;
bus_size_t size;
int flags;
int bar = RTSX_PCI_BAR;

if ((pci_conf_read(pa->pa_pc, pa->pa_tag, RTSX_CFG_PCI)
& RTSX_CFG_ASIC) != 0) {
Expand All @@ -101,33 +104,36 @@ rtsx_pci_attach(struct device *parent, struct device *self, void *aux)
}
printf(": %s\n", intrstr);

if (pci_mem_find(pa->pa_pc, pa->pa_tag, RTSX_PCI_BAR,
NULL, NULL, NULL) != 0) {
switch (PCI_PRODUCT(pa->pa_id)) {
case PCI_PRODUCT_REALTEK_RTS5209:
flags = RTSX_F_5209;
break;
case PCI_PRODUCT_REALTEK_RTS5229:
case PCI_PRODUCT_REALTEK_RTS5249:
flags = RTSX_F_5229;
break;
case PCI_PRODUCT_REALTEK_RTS525A:
flags = RTSX_F_525A;
bar = RTSX_PCI_BAR_525A;
break;
default:
flags = 0;
break;
}

if (pci_mem_find(pa->pa_pc, pa->pa_tag, bar, NULL, NULL, NULL) != 0) {
printf("%s: can't find registers\n", sc->sc.sc_dev.dv_xname);
return;
}

if (pci_mapreg_map(pa, RTSX_PCI_BAR, PCI_MAPREG_TYPE_MEM, 0,
&iot, &ioh, NULL, &size, 0)) {
if (pci_mapreg_map(pa, bar, PCI_MAPREG_TYPE_MEM, 0, &iot, &ioh, NULL,
&size, 0)) {
printf("%s: can't map registers\n", sc->sc.sc_dev.dv_xname);
return;
}

pci_set_powerstate(pa->pa_pc, pa->pa_tag, PCI_PMCSR_STATE_D0);

switch (PCI_PRODUCT(pa->pa_id)) {
case PCI_PRODUCT_REALTEK_RTS5209:
flags = RTSX_F_5209;
break;
case PCI_PRODUCT_REALTEK_RTS5229:
case PCI_PRODUCT_REALTEK_RTS5249:
flags = RTSX_F_5229;
break;
default:
flags = 0;
break;
}

if (rtsx_attach(&sc->sc, iot, ioh, size, pa->pa_dmat, flags) != 0)
printf("%s: can't initialize chip\n", sc->sc.sc_dev.dv_xname);
}

0 comments on commit 2c295ed

Please sign in to comment.