Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 161623
b: refs/heads/master
c: 043fe50
h: refs/heads/master
i:
  161621: 3dbcf1b
  161619: f92f10b
  161615: 359203d
v: v3
  • Loading branch information
Linus Torvalds committed Sep 15, 2009
1 parent 9206625 commit 0c591d8
Show file tree
Hide file tree
Showing 2,560 changed files with 222,313 additions and 102,199 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ea47689e74a1637fac4f5fc44890f3662c976849
refs/heads/master: 043fe50f8085c12651c96f04576eae4d8a22f3d8
2 changes: 2 additions & 0 deletions trunk/Documentation/00-INDEX
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ block/
- info on the Block I/O (BIO) layer.
blockdev/
- info on block devices & drivers
btmrvl.txt
- info on Marvell Bluetooth driver usage.
cachetlb.txt
- describes the cache/TLB flushing interfaces Linux uses.
cdrom/
Expand Down
75 changes: 75 additions & 0 deletions trunk/Documentation/arm/Samsung-S3C24XX/CPUfreq.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
S3C24XX CPUfreq support
=======================

Introduction
------------

The S3C24XX series support a number of power saving systems, such as
the ability to change the core, memory and peripheral operating
frequencies. The core control is exported via the CPUFreq driver
which has a number of different manual or automatic controls over the
rate the core is running at.

There are two forms of the driver depending on the specific CPU and
how the clocks are arranged. The first implementation used as single
PLL to feed the ARM, memory and peripherals via a series of dividers
and muxes and this is the implementation that is documented here. A
newer version where there is a seperate PLL and clock divider for the
ARM core is available as a seperate driver.


Layout
------

The code core manages the CPU specific drivers, any data that they
need to register and the interface to the generic drivers/cpufreq
system. Each CPU registers a driver to control the PLL, clock dividers
and anything else associated with it. Any board that wants to use this
framework needs to supply at least basic details of what is required.

The core registers with drivers/cpufreq at init time if all the data
necessary has been supplied.


CPU support
-----------

The support for each CPU depends on the facilities provided by the
SoC and the driver as each device has different PLL and clock chains
associated with it.


Slow Mode
---------

The SLOW mode where the PLL is turned off altogether and the
system is fed by the external crystal input is currently not
supported.


sysfs
-----

The core code exports extra information via sysfs in the directory
devices/system/cpu/cpu0/arch-freq.


Board Support
-------------

Each board that wants to use the cpufreq code must register some basic
information with the core driver to provide information about what the
board requires and any restrictions being placed on it.

The board needs to supply information about whether it needs the IO bank
timings changing, any maximum frequency limits and information about the
SDRAM refresh rate.




Document Author
---------------

Ben Dooks, Copyright 2009 Simtec Electronics
Licensed under GPLv2
119 changes: 119 additions & 0 deletions trunk/Documentation/btmrvl.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
=======================================================================
README for btmrvl driver
=======================================================================


All commands are used via debugfs interface.

=====================
Set/get driver configurations:

Path: /debug/btmrvl/config/

gpiogap=[n]
hscfgcmd
These commands are used to configure the host sleep parameters.
bit 8:0 -- Gap
bit 16:8 -- GPIO

where GPIO is the pin number of GPIO used to wake up the host.
It could be any valid GPIO pin# (e.g. 0-7) or 0xff (SDIO interface
wakeup will be used instead).

where Gap is the gap in milli seconds between wakeup signal and
wakeup event, or 0xff for special host sleep setting.

Usage:
# Use SDIO interface to wake up the host and set GAP to 0x80:
echo 0xff80 > /debug/btmrvl/config/gpiogap
echo 1 > /debug/btmrvl/config/hscfgcmd

# Use GPIO pin #3 to wake up the host and set GAP to 0xff:
echo 0x03ff > /debug/btmrvl/config/gpiogap
echo 1 > /debug/btmrvl/config/hscfgcmd

psmode=[n]
pscmd
These commands are used to enable/disable auto sleep mode

where the option is:
1 -- Enable auto sleep mode
0 -- Disable auto sleep mode

Usage:
# Enable auto sleep mode
echo 1 > /debug/btmrvl/config/psmode
echo 1 > /debug/btmrvl/config/pscmd

# Disable auto sleep mode
echo 0 > /debug/btmrvl/config/psmode
echo 1 > /debug/btmrvl/config/pscmd


hsmode=[n]
hscmd
These commands are used to enable host sleep or wake up firmware

where the option is:
1 -- Enable host sleep
0 -- Wake up firmware

Usage:
# Enable host sleep
echo 1 > /debug/btmrvl/config/hsmode
echo 1 > /debug/btmrvl/config/hscmd

# Wake up firmware
echo 0 > /debug/btmrvl/config/hsmode
echo 1 > /debug/btmrvl/config/hscmd


======================
Get driver status:

Path: /debug/btmrvl/status/

Usage:
cat /debug/btmrvl/status/<args>

where the args are:

curpsmode
This command displays current auto sleep status.

psstate
This command display the power save state.

hsstate
This command display the host sleep state.

txdnldrdy
This command displays the value of Tx download ready flag.


=====================

Use hcitool to issue raw hci command, refer to hcitool manual

Usage: Hcitool cmd <ogf> <ocf> [Parameters]

Interface Control Command
hcitool cmd 0x3f 0x5b 0xf5 0x01 0x00 --Enable All interface
hcitool cmd 0x3f 0x5b 0xf5 0x01 0x01 --Enable Wlan interface
hcitool cmd 0x3f 0x5b 0xf5 0x01 0x02 --Enable BT interface
hcitool cmd 0x3f 0x5b 0xf5 0x00 0x00 --Disable All interface
hcitool cmd 0x3f 0x5b 0xf5 0x00 0x01 --Disable Wlan interface
hcitool cmd 0x3f 0x5b 0xf5 0x00 0x02 --Disable BT interface

=======================================================================


SD8688 firmware:

/lib/firmware/sd8688_helper.bin
/lib/firmware/sd8688.bin


The images can be downloaded from:

git.infradead.org/users/dwmw2/linux-firmware.git/libertas/
5 changes: 5 additions & 0 deletions trunk/Documentation/connector/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,8 @@ hostprogs-y := ucon
always := $(hostprogs-y)

HOSTCFLAGS_ucon.o += -I$(objtree)/usr/include

all: modules

modules clean:
$(MAKE) -C ../.. SUBDIRS=$(PWD) $@
33 changes: 18 additions & 15 deletions trunk/Documentation/connector/cn_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#define pr_fmt(fmt) "cn_test: " fmt

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
Expand All @@ -27,18 +29,17 @@

#include <linux/connector.h>

static struct cb_id cn_test_id = { 0x123, 0x456 };
static struct cb_id cn_test_id = { CN_NETLINK_USERS + 3, 0x456 };
static char cn_test_name[] = "cn_test";
static struct sock *nls;
static struct timer_list cn_test_timer;

void cn_test_callback(void *data)
static void cn_test_callback(struct cn_msg *msg)
{
struct cn_msg *msg = (struct cn_msg *)data;

printk("%s: %lu: idx=%x, val=%x, seq=%u, ack=%u, len=%d: %s.\n",
__func__, jiffies, msg->id.idx, msg->id.val,
msg->seq, msg->ack, msg->len, (char *)msg->data);
pr_info("%s: %lu: idx=%x, val=%x, seq=%u, ack=%u, len=%d: %s.\n",
__func__, jiffies, msg->id.idx, msg->id.val,
msg->seq, msg->ack, msg->len,
msg->len ? (char *)msg->data : "");
}

/*
Expand All @@ -63,9 +64,7 @@ static int cn_test_want_notify(void)

skb = alloc_skb(size, GFP_ATOMIC);
if (!skb) {
printk(KERN_ERR "Failed to allocate new skb with size=%u.\n",
size);

pr_err("failed to allocate new skb with size=%u\n", size);
return -ENOMEM;
}

Expand Down Expand Up @@ -114,12 +113,12 @@ static int cn_test_want_notify(void)
//netlink_broadcast(nls, skb, 0, ctl->group, GFP_ATOMIC);
netlink_unicast(nls, skb, 0, 0);

printk(KERN_INFO "Request was sent. Group=0x%x.\n", ctl->group);
pr_info("request was sent: group=0x%x\n", ctl->group);

return 0;

nlmsg_failure:
printk(KERN_ERR "Failed to send %u.%u\n", msg->seq, msg->ack);
pr_err("failed to send %u.%u\n", msg->seq, msg->ack);
kfree_skb(skb);
return -EINVAL;
}
Expand All @@ -131,6 +130,8 @@ static void cn_test_timer_func(unsigned long __data)
struct cn_msg *m;
char data[32];

pr_debug("%s: timer fired with data %lu\n", __func__, __data);

m = kzalloc(sizeof(*m) + sizeof(data), GFP_ATOMIC);
if (m) {

Expand All @@ -150,7 +151,7 @@ static void cn_test_timer_func(unsigned long __data)

cn_test_timer_counter++;

mod_timer(&cn_test_timer, jiffies + HZ);
mod_timer(&cn_test_timer, jiffies + msecs_to_jiffies(1000));
}

static int cn_test_init(void)
Expand All @@ -168,8 +169,10 @@ static int cn_test_init(void)
}

setup_timer(&cn_test_timer, cn_test_timer_func, 0);
cn_test_timer.expires = jiffies + HZ;
add_timer(&cn_test_timer);
mod_timer(&cn_test_timer, jiffies + msecs_to_jiffies(1000));

pr_info("initialized with id={%u.%u}\n",
cn_test_id.idx, cn_test_id.val);

return 0;

Expand Down
Loading

0 comments on commit 0c591d8

Please sign in to comment.