spi: Define and use spi_ctrlr structure
1. Define a new structure spi_ctrlr that allows platforms to define callbacks for spi operations (claim bus, release bus, transfer). 2. Add a new member (pointer to spi_ctrlr structure) in spi_slave structure which will be initialized by call to spi_setup_slave. 3. Define spi_claim_bus, spi_release_bus and spi_xfer in spi-generic.c which will make appropriate calls to ctrlr functions. BUG=chrome-os-partner:59832 BRANCH=None TEST=Compiles successfully Change-Id: Icb2326e3aab1e8f4bef53f553f82b3836358c55e Signed-off-by: Furquan Shaikh <furquan@chromium.org> Reviewed-on: https://review.coreboot.org/17684 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
committed by
Furquan Shaikh
parent
36b81af9e8
commit
94f8699d44
43
src/drivers/spi/spi-generic.c
Normal file
43
src/drivers/spi/spi-generic.c
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright 2016 Google Inc.
|
||||
*
|
||||
* 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 of the License, 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.
|
||||
*/
|
||||
|
||||
#include <spi-generic.h>
|
||||
#include <string.h>
|
||||
|
||||
int spi_claim_bus(const struct spi_slave *slave)
|
||||
{
|
||||
const struct spi_ctrlr *ctrlr = slave->ctrlr;
|
||||
if (ctrlr && ctrlr->claim_bus)
|
||||
return ctrlr->claim_bus(slave);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void spi_release_bus(const struct spi_slave *slave)
|
||||
{
|
||||
const struct spi_ctrlr *ctrlr = slave->ctrlr;
|
||||
if (ctrlr && ctrlr->release_bus)
|
||||
ctrlr->release_bus(slave);
|
||||
}
|
||||
|
||||
int spi_xfer(const struct spi_slave *slave, const void *dout, size_t bytesout,
|
||||
void *din, size_t bytesin)
|
||||
{
|
||||
const struct spi_ctrlr *ctrlr = slave->ctrlr;
|
||||
if (ctrlr && ctrlr->xfer)
|
||||
return ctrlr->xfer(slave, dout, bytesout, din, bytesin);
|
||||
|
||||
return -1;
|
||||
}
|
Reference in New Issue
Block a user