From owner-svn-src-projects@FreeBSD.ORG Wed Feb 29 01:38:37 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 695AC1065670; Wed, 29 Feb 2012 01:38:37 +0000 (UTC) (envelope-from dmarion@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 49E5B8FC1B; Wed, 29 Feb 2012 01:38:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q1T1cb8O001496; Wed, 29 Feb 2012 01:38:37 GMT (envelope-from dmarion@svn.freebsd.org) Received: (from dmarion@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q1T1cb6F001494; Wed, 29 Feb 2012 01:38:37 GMT (envelope-from dmarion@svn.freebsd.org) Message-Id: <201202290138.q1T1cb6F001494@svn.freebsd.org> From: Damjan Marion Date: Wed, 29 Feb 2012 01:38:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r232284 - projects/armv6/sys/arm/ti/am335x X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Feb 2012 01:38:37 -0000 Author: dmarion Date: Wed Feb 29 01:38:36 2012 New Revision: 232284 URL: http://svn.freebsd.org/changeset/base/232284 Log: am335x_pmic driver should be probed based on FDT data. Approved by: cognet (mentor) Modified: projects/armv6/sys/arm/ti/am335x/am335x_pmic.c Modified: projects/armv6/sys/arm/ti/am335x/am335x_pmic.c ============================================================================== --- projects/armv6/sys/arm/ti/am335x/am335x_pmic.c Wed Feb 29 01:36:00 2012 (r232283) +++ projects/armv6/sys/arm/ti/am335x/am335x_pmic.c Wed Feb 29 01:38:36 2012 (r232284) @@ -44,18 +44,20 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include "iicbus_if.h" #define TPS65217A 0x7 #define TPS65217B 0xF -#define TPS65217_IIC_ADDR 0x24 - /* TPS65217 Reisters */ #define TPS65217_CHIPID_REG 0x00 #define TPS65217_STATUS_REG 0x0A +#define MAX_IIC_DATA_SIZE 2 + + struct am335x_pmic_softc { device_t sc_dev; uint32_t sc_addr; @@ -65,28 +67,39 @@ struct am335x_pmic_softc { static int am335x_pmic_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size) { + struct am335x_pmic_softc *sc = device_get_softc(dev); struct iic_msg msg[] = { - { TPS65217_IIC_ADDR, IIC_M_WR, 1, &addr }, - { TPS65217_IIC_ADDR, IIC_M_RD, size, data }, + { sc->sc_addr, IIC_M_WR, 1, &addr }, + { sc->sc_addr, IIC_M_RD, size, data }, }; return (iicbus_transfer(dev, msg, 2)); } -static void -am335x_pmic_identify(driver_t *driver, device_t parent) +static int +am335x_pmic_write(device_t dev, uint8_t address, uint8_t *data, uint8_t size) { - BUS_ADD_CHILD(parent, 0, "am335x_pmic", 0); + uint8_t buffer[MAX_IIC_DATA_SIZE + 1]; + struct am335x_pmic_softc *sc = device_get_softc(dev); + struct iic_msg msg[] = { + { sc->sc_addr, IIC_M_WR, size + 1, buffer }, + }; + + if (size > MAX_IIC_DATA_SIZE) + return (ENOMEM); + + buffer[0] = address; + memcpy(buffer + 1, data, size); + + return (iicbus_transfer(dev, msg, 1)); } static int am335x_pmic_probe(device_t dev) { struct am335x_pmic_softc *sc; - int error; - const char *name, *compatible; - name = ofw_bus_get_name(dev); - compatible = ofw_bus_get_compat(dev); + if (!ofw_bus_is_compatible(dev, "ti,am335x-pmic")) + return (ENXIO); sc = device_get_softc(dev); sc->sc_dev = dev; @@ -94,7 +107,7 @@ am335x_pmic_probe(device_t dev) device_set_desc(dev, "TI TPS65217 Power Management IC"); - return (BUS_PROBE_NOWILDCARD); + return (0); } static void @@ -103,7 +116,7 @@ am335x_pmic_start(void *xdev) struct am335x_pmic_softc *sc; device_t dev = (device_t)xdev; uint8_t reg; - char name[16]; + char name[20]; char pwr[4][11] = {"Unknown", "USB", "AC", "USB and AC"}; sc = device_get_softc(dev); @@ -143,7 +156,6 @@ am335x_pmic_attach(device_t dev) } static device_method_t am335x_pmic_methods[] = { - DEVMETHOD(device_identify, am335x_pmic_identify), DEVMETHOD(device_probe, am335x_pmic_probe), DEVMETHOD(device_attach, am335x_pmic_attach), {0, 0},