/* * L3 code * * Copyright (C) 2008, Christian Pellegrin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * * based on: * * L3 bus algorithm module. * * Copyright (C) 2001 Russell King, All Rights Reserved. * * */ #include #include #include #include #include #include /* * Send one byte of data to the chip. Data is latched into the chip on * the rising edge of the clock. */ static void sendbyte(struct l3_pins *adap, unsigned int byte) { int i; for (i = 0; i < 8; i++) { adap->setclk(adap, 0); udelay(adap->data_hold); adap->setdat(adap, byte & 1); udelay(adap->data_setup); adap->setclk(adap, 1); udelay(adap->clock_high); byte >>= 1; } } /* * Send a set of bytes to the chip. We need to pulse the MODE line * between each byte, but never at the start nor at the end of the * transfer. */ static void sendbytes(struct l3_pins *adap, const u8 *buf, int len) { int i; for (i = 0; i < len; i++) { if (i) { udelay(adap->mode_hold); adap->setmode(adap, 0); udelay(adap->mode); } adap->setmode(adap, 1); udelay(adap->mode_setup); sendbyte(adap, buf[i]); } } int l3_write(struct l3_pins *adap, u8 addr, u8 *data, int len) { adap->setclk(adap, 1); adap->setdat(adap, 1); adap->setmode(adap, 1); udelay(adap->mode); adap->setmode(adap, 0); udelay(adap->mode_setup); sendbyte(adap, addr); udelay(adap->mode_hold); sendbytes(adap, data, len); adap->setclk(adap, 1); adap->setdat(adap, 1); adap->setmode(adap, 0); return len; } EXPORT_SYMBOL_GPL(l3_write); static void l3_set_clk(struct l3_pins *adap, int val) { gpio_set_value(adap->gpio_clk, val); } static void l3_set_data(struct l3_pins *adap, int val) { gpio_set_value(adap->gpio_data, val); } static void l3_set_mode(struct l3_pins *adap, int val) { gpio_set_value(adap->gpio_mode, val); } int l3_set_gpio_ops(struct device *dev, struct l3_pins *adap) { int ret; if (!adap->use_gpios) return -EINVAL; ret = devm_gpio_request_one(dev, adap->gpio_data, GPIOF_OUT_INIT_LOW, "l3_data"); if (ret < 0) return ret; adap->setdat = l3_set_data; ret = devm_gpio_request_one(dev, adap->gpio_clk, GPIOF_OUT_INIT_LOW, "l3_clk"); if (ret < 0) return ret; adap->setclk = l3_set_clk; ret = devm_gpio_request_one(dev, adap->gpio_mode, GPIOF_OUT_INIT_LOW, "l3_mode"); if (ret < 0) return ret; adap->setmode = l3_set_mode; return 0; } EXPORT_SYMBOL_GPL(l3_set_gpio_ops); MODULE_DESCRIPTION("L3 bit-banging driver"); MODULE_AUTHOR("Christian Pellegrin "); MODULE_LICENSE("GPL"); thod='get'>
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-12-16 11:23:34 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-16 11:23:34 -0800
commit59331c215daf600a650e281b6e8ef3e1ed1174c2 (patch)
treef62bf3253fe48d7dd8b09b040c8e7fd9b2c02a86 /net
parentff0f962ca3c38239b299a70e7eea27abfbb979c3 (diff)
parent45ee2c1d66185e5bd27702c60cce3c43fa3370d2 (diff)
Merge tag 'ceph-for-4.10-rc1' of git://github.com/ceph/ceph-client
Pull ceph updates from Ilya Dryomov: "A varied set of changes: - a large rework of cephx auth code to cope with CONFIG_VMAP_STACK (myself). Also fixed a deadlock caused by a bogus allocation on the writeback path and authorize reply verification. - a fix for long stalls during fsync (Jeff Layton). The client now has a way to force the MDS log flush, leading to ~100x speedups in some synthetic tests. - a new [no]require_active_mds mount option (Zheng Yan). On mount, we will now check whether any of the MDSes are available and bail rather than block if none are. This check can be avoided by specifying the "no" option. - a couple of MDS cap handling fixes and a few assorted patches throughout" * tag 'ceph-for-4.10-rc1' of git://github.com/ceph/ceph-client: (32 commits) libceph: remove now unused finish_request() wrapper libceph: always signal completion when done ceph: avoid creating orphan object when checking pool permission ceph: properly set issue_seq for cap release ceph: add flags parameter to send_cap_msg ceph: update cap message struct version to 10 ceph: define new argument structure for send_cap_msg ceph: move xattr initialzation before the encoding past the ceph_mds_caps ceph: fix minor typo in unsafe_request_wait ceph: record truncate size/seq for snap data writeback ceph: check availability of mds cluster on mount ceph: fix splice read for no Fc capability case ceph: try getting buffer capability for readahead/fadvise ceph: fix scheduler warning due to nested blocking ceph: fix printing wrong return variable in ceph_direct_read_write() crush: include mapper.h in mapper.c rbd: silence bogus -Wmaybe-uninitialized warning libceph: no need to drop con->mutex for ->get_authorizer() libceph: drop len argument of *verify_authorizer_reply() libceph: verify authorize reply on connect ...
Diffstat (limited to 'net')