mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-19 08:13:57 +00:00
Allow building a kernel with baked in ig4, isl and cyapa drivers.
Also addresses jhb's remarks on D2811 and D3068. PR: 202059 Differential Revision: https://reviews.freebsd.org/D3351 Reviewed by: jhb Approved by: jhb
This commit is contained in:
parent
13adf27426
commit
12e413be27
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=286918
|
@ -1236,6 +1236,7 @@ t5fw.fw optional cxgbe \
|
||||||
dev/cy/cy.c optional cy
|
dev/cy/cy.c optional cy
|
||||||
dev/cy/cy_isa.c optional cy isa
|
dev/cy/cy_isa.c optional cy isa
|
||||||
dev/cy/cy_pci.c optional cy pci
|
dev/cy/cy_pci.c optional cy pci
|
||||||
|
dev/cyapa/cyapa.c optional cyapa smbus
|
||||||
dev/dc/if_dc.c optional dc pci
|
dev/dc/if_dc.c optional dc pci
|
||||||
dev/dc/dcphy.c optional dc pci
|
dev/dc/dcphy.c optional dc pci
|
||||||
dev/dc/pnphy.c optional dc pci
|
dev/dc/pnphy.c optional dc pci
|
||||||
|
@ -1461,8 +1462,8 @@ dev/hptiop/hptiop.c optional hptiop scbus
|
||||||
dev/hwpmc/hwpmc_logging.c optional hwpmc
|
dev/hwpmc/hwpmc_logging.c optional hwpmc
|
||||||
dev/hwpmc/hwpmc_mod.c optional hwpmc
|
dev/hwpmc/hwpmc_mod.c optional hwpmc
|
||||||
dev/hwpmc/hwpmc_soft.c optional hwpmc
|
dev/hwpmc/hwpmc_soft.c optional hwpmc
|
||||||
dev/ichiic/ig4_iic.c optional ichiic
|
dev/ichiic/ig4_iic.c optional ig4 smbus
|
||||||
dev/ichiic/ig4_pci.c optional ichiic pci
|
dev/ichiic/ig4_pci.c optional ig4 pci smbus
|
||||||
dev/ichsmb/ichsmb.c optional ichsmb
|
dev/ichsmb/ichsmb.c optional ichsmb
|
||||||
dev/ichsmb/ichsmb_pci.c optional ichsmb pci
|
dev/ichsmb/ichsmb_pci.c optional ichsmb pci
|
||||||
dev/ida/ida.c optional ida
|
dev/ida/ida.c optional ida
|
||||||
|
@ -1557,6 +1558,7 @@ dev/iscsi_initiator/isc_soc.c optional iscsi_initiator scbus
|
||||||
dev/iscsi_initiator/isc_sm.c optional iscsi_initiator scbus
|
dev/iscsi_initiator/isc_sm.c optional iscsi_initiator scbus
|
||||||
dev/iscsi_initiator/isc_subr.c optional iscsi_initiator scbus
|
dev/iscsi_initiator/isc_subr.c optional iscsi_initiator scbus
|
||||||
dev/ismt/ismt.c optional ismt
|
dev/ismt/ismt.c optional ismt
|
||||||
|
dev/isl/isl.c optional isl smbus
|
||||||
dev/isp/isp.c optional isp
|
dev/isp/isp.c optional isp
|
||||||
dev/isp/isp_freebsd.c optional isp
|
dev/isp/isp_freebsd.c optional isp
|
||||||
dev/isp/isp_library.c optional isp
|
dev/isp/isp_library.c optional isp
|
||||||
|
|
|
@ -149,7 +149,6 @@ struct cyapa_fifo {
|
||||||
struct cyapa_softc {
|
struct cyapa_softc {
|
||||||
device_t dev;
|
device_t dev;
|
||||||
int count; /* >0 if device opened */
|
int count; /* >0 if device opened */
|
||||||
int unit;
|
|
||||||
int addr;
|
int addr;
|
||||||
struct cdev *devnode;
|
struct cdev *devnode;
|
||||||
struct selinfo selinfo;
|
struct selinfo selinfo;
|
||||||
|
@ -450,7 +449,6 @@ static int
|
||||||
cyapa_probe(device_t dev)
|
cyapa_probe(device_t dev)
|
||||||
{
|
{
|
||||||
struct cyapa_cap cap;
|
struct cyapa_cap cap;
|
||||||
int unit;
|
|
||||||
int addr;
|
int addr;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
@ -463,8 +461,6 @@ cyapa_probe(device_t dev)
|
||||||
if (addr != 0x67)
|
if (addr != 0x67)
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
|
||||||
unit = device_get_unit(dev);
|
|
||||||
|
|
||||||
error = init_device(dev, &cap, addr, 1);
|
error = init_device(dev, &cap, addr, 1);
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
@ -486,7 +482,7 @@ cyapa_attach(device_t dev)
|
||||||
sc->reporting_mode = 1;
|
sc->reporting_mode = 1;
|
||||||
|
|
||||||
unit = device_get_unit(dev);
|
unit = device_get_unit(dev);
|
||||||
addr = *((unsigned char*) device_get_ivars(dev));
|
addr = smbus_get_addr(dev);
|
||||||
|
|
||||||
if (init_device(dev, &cap, addr, 0))
|
if (init_device(dev, &cap, addr, 0))
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
@ -494,7 +490,6 @@ cyapa_attach(device_t dev)
|
||||||
mtx_init(&sc->mutex, "cyapa", NULL, MTX_DEF);
|
mtx_init(&sc->mutex, "cyapa", NULL, MTX_DEF);
|
||||||
|
|
||||||
sc->dev = dev;
|
sc->dev = dev;
|
||||||
sc->unit = unit;
|
|
||||||
sc->addr = addr;
|
sc->addr = addr;
|
||||||
|
|
||||||
knlist_init_mtx(&sc->selinfo.si_note, &sc->mutex);
|
knlist_init_mtx(&sc->selinfo.si_note, &sc->mutex);
|
||||||
|
|
|
@ -74,8 +74,8 @@ static void ig4iic_intr(void *cookie);
|
||||||
static void ig4iic_dump(ig4iic_softc_t *sc);
|
static void ig4iic_dump(ig4iic_softc_t *sc);
|
||||||
|
|
||||||
static int ig4_dump;
|
static int ig4_dump;
|
||||||
SYSCTL_INT(_debug, OID_AUTO, ig4_dump, CTLTYPE_INT | CTLFLAG_RW,
|
SYSCTL_INT(_debug, OID_AUTO, ig4_dump, CTLFLAG_RW,
|
||||||
&ig4_dump, 0, "");
|
&ig4_dump, 0, "Dump controller registers");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Low-level inline support functions
|
* Low-level inline support functions
|
||||||
|
|
|
@ -71,12 +71,9 @@ __FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
struct isl_softc {
|
struct isl_softc {
|
||||||
device_t dev;
|
device_t dev;
|
||||||
int unit;
|
|
||||||
int addr;
|
int addr;
|
||||||
|
|
||||||
struct sx isl_sx;
|
struct sx isl_sx;
|
||||||
struct sysctl_ctx_list *sysctl_ctx;
|
|
||||||
struct sysctl_oid *sysctl_tree;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Returns < 0 on problem. */
|
/* Returns < 0 on problem. */
|
||||||
|
@ -85,8 +82,7 @@ static int isl_read_sensor(device_t dev, int addr, uint8_t cmd_mask);
|
||||||
/*
|
/*
|
||||||
* Initialize the device
|
* Initialize the device
|
||||||
*/
|
*/
|
||||||
static
|
static int
|
||||||
int
|
|
||||||
init_device(device_t dev, int addr, int probe)
|
init_device(device_t dev, int addr, int probe)
|
||||||
{
|
{
|
||||||
static char bl_init[] = { 0x00 };
|
static char bl_init[] = { 0x00 };
|
||||||
|
@ -145,7 +141,6 @@ static driver_t isl_driver = {
|
||||||
static int
|
static int
|
||||||
isl_probe(device_t dev)
|
isl_probe(device_t dev)
|
||||||
{
|
{
|
||||||
int unit;
|
|
||||||
int addr;
|
int addr;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
@ -158,8 +153,6 @@ isl_probe(device_t dev)
|
||||||
if (addr != 0x44)
|
if (addr != 0x44)
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
|
||||||
unit = device_get_unit(dev);
|
|
||||||
|
|
||||||
error = init_device(dev, addr, 1);
|
error = init_device(dev, addr, 1);
|
||||||
if (error)
|
if (error)
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
@ -173,7 +166,8 @@ static int
|
||||||
isl_attach(device_t dev)
|
isl_attach(device_t dev)
|
||||||
{
|
{
|
||||||
struct isl_softc *sc;
|
struct isl_softc *sc;
|
||||||
int unit;
|
struct sysctl_ctx_list *sysctl_ctx;
|
||||||
|
struct sysctl_oid *sysctl_tree;
|
||||||
int addr;
|
int addr;
|
||||||
int use_als;
|
int use_als;
|
||||||
int use_ir;
|
int use_ir;
|
||||||
|
@ -184,8 +178,7 @@ isl_attach(device_t dev)
|
||||||
if (!sc)
|
if (!sc)
|
||||||
return (ENOMEM);
|
return (ENOMEM);
|
||||||
|
|
||||||
unit = device_get_unit(dev);
|
addr = smbus_get_addr(dev);
|
||||||
addr = *((unsigned char*) device_get_ivars(dev));
|
|
||||||
|
|
||||||
if (init_device(dev, addr, 0))
|
if (init_device(dev, addr, 0))
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
|
@ -193,48 +186,47 @@ isl_attach(device_t dev)
|
||||||
sx_init(&sc->isl_sx, "ISL read lock");
|
sx_init(&sc->isl_sx, "ISL read lock");
|
||||||
|
|
||||||
sc->dev = dev;
|
sc->dev = dev;
|
||||||
sc->unit = unit;
|
|
||||||
sc->addr = addr;
|
sc->addr = addr;
|
||||||
|
|
||||||
sc->sysctl_ctx = device_get_sysctl_ctx(dev);
|
sysctl_ctx = device_get_sysctl_ctx(dev);
|
||||||
sc->sysctl_tree = device_get_sysctl_tree(dev);
|
sysctl_tree = device_get_sysctl_tree(dev);
|
||||||
|
|
||||||
use_als = isl_read_sensor(dev, addr, CMD1_MASK_ALS_ONCE) >= 0;
|
use_als = isl_read_sensor(dev, addr, CMD1_MASK_ALS_ONCE) >= 0;
|
||||||
use_ir = isl_read_sensor(dev, addr, CMD1_MASK_IR_ONCE) >= 0;
|
use_ir = isl_read_sensor(dev, addr, CMD1_MASK_IR_ONCE) >= 0;
|
||||||
use_prox = isl_read_sensor(dev, addr, CMD1_MASK_PROX_ONCE) >= 0;
|
use_prox = isl_read_sensor(dev, addr, CMD1_MASK_PROX_ONCE) >= 0;
|
||||||
|
|
||||||
if (use_als) {
|
if (use_als) {
|
||||||
SYSCTL_ADD_PROC(sc->sysctl_ctx,
|
SYSCTL_ADD_PROC(sysctl_ctx,
|
||||||
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
|
SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||||
"als", CTLTYPE_INT | CTLFLAG_RD,
|
"als", CTLTYPE_INT | CTLFLAG_RD,
|
||||||
sc, ISL_METHOD_ALS, isl_sysctl, "I",
|
sc, ISL_METHOD_ALS, isl_sysctl, "I",
|
||||||
"Current ALS sensor read-out");
|
"Current ALS sensor read-out");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_ir) {
|
if (use_ir) {
|
||||||
SYSCTL_ADD_PROC(sc->sysctl_ctx,
|
SYSCTL_ADD_PROC(sysctl_ctx,
|
||||||
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
|
SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||||
"ir", CTLTYPE_INT | CTLFLAG_RD,
|
"ir", CTLTYPE_INT | CTLFLAG_RD,
|
||||||
sc, ISL_METHOD_IR, isl_sysctl, "I",
|
sc, ISL_METHOD_IR, isl_sysctl, "I",
|
||||||
"Current IR sensor read-out");
|
"Current IR sensor read-out");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_prox) {
|
if (use_prox) {
|
||||||
SYSCTL_ADD_PROC(sc->sysctl_ctx,
|
SYSCTL_ADD_PROC(sysctl_ctx,
|
||||||
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
|
SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||||
"prox", CTLTYPE_INT | CTLFLAG_RD,
|
"prox", CTLTYPE_INT | CTLFLAG_RD,
|
||||||
sc, ISL_METHOD_PROX, isl_sysctl, "I",
|
sc, ISL_METHOD_PROX, isl_sysctl, "I",
|
||||||
"Current proximity sensor read-out");
|
"Current proximity sensor read-out");
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSCTL_ADD_PROC(sc->sysctl_ctx,
|
SYSCTL_ADD_PROC(sysctl_ctx,
|
||||||
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
|
SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||||
"resolution", CTLTYPE_INT | CTLFLAG_RD,
|
"resolution", CTLTYPE_INT | CTLFLAG_RD,
|
||||||
sc, ISL_METHOD_RESOLUTION, isl_sysctl, "I",
|
sc, ISL_METHOD_RESOLUTION, isl_sysctl, "I",
|
||||||
"Current proximity sensor resolution");
|
"Current proximity sensor resolution");
|
||||||
|
|
||||||
SYSCTL_ADD_PROC(sc->sysctl_ctx,
|
SYSCTL_ADD_PROC(sysctl_ctx,
|
||||||
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO,
|
SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
|
||||||
"range", CTLTYPE_INT | CTLFLAG_RD,
|
"range", CTLTYPE_INT | CTLFLAG_RD,
|
||||||
sc, ISL_METHOD_RANGE, isl_sysctl, "I",
|
sc, ISL_METHOD_RANGE, isl_sysctl, "I",
|
||||||
"Current proximity sensor range");
|
"Current proximity sensor range");
|
||||||
|
@ -307,7 +299,8 @@ isl_sysctl(SYSCTL_HANDLER_ARGS)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int isl_read_sensor(device_t dev, int addr, uint8_t cmd_mask)
|
static int
|
||||||
|
isl_read_sensor(device_t dev, int addr, uint8_t cmd_mask)
|
||||||
{
|
{
|
||||||
device_t bus;
|
device_t bus;
|
||||||
uint8_t rbyte;
|
uint8_t rbyte;
|
||||||
|
|
Loading…
Reference in a new issue